专栏首页闻道于事Java工具类之浮点精确计算

Java工具类之浮点精确计算

public class Arith
{
    // 默认除法运算精度
    private static final int DEF_DIV_SCALE = 10;
    // 构造器私有,让这个类不能实例化
    private Arith()    {}
    // 提供精确的加法运算。
    public static double add(double v1,double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.add(b2).doubleValue();
    }
    // 提供精确的减法运算。
    public static double sub(double v1,double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.subtract(b2).doubleValue();
    }
    // 提供精确的乘法运算。
    public static double mul(double v1,double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.multiply(b2).doubleValue();
    }
    // 提供(相对)精确的除法运算,当发生除不尽的情况时.
    // 精确到小数点以后10位的数字四舍五入。
    public static double div(double v1,double v2)
    {
        BigDecimal b1 = BigDecimal.valueOf(v1);
        BigDecimal b2 = BigDecimal.valueOf(v2);
        return b1.divide(b2 , DEF_DIV_SCALE
            , RoundingMode.HALF_UP).doubleValue();
    }
    public static void main(String[] args)
    {
        System.out.println("0.05 + 0.01 = "
            + Arith.add(0.05 , 0.01));
        System.out.println("1.0 - 0.42 = "
            + Arith.sub(1.0 , 0.42));
        System.out.println("4.015 * 100 = "
            + Arith.mul(4.015 , 100));
        System.out.println("123.3 / 100 = "
            + Arith.div(123.3 , 100));
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MyBatis Plus + Activity 整合报错

    二十三年蝉
  • JavaScript事件与例子(三)

    两个例子,好友选中效果和左侧右侧子菜单 一、好友选中效果 可以通过设置属性的方式判断当前是否被选中,也可以通过获取当前元素的颜色从而得知当前元素状态是否被选中,...

    二十三年蝉
  • JavaScript表单验证和正则表达式

    JavaScript表单验证 ? 分为四类:   1.非空验证     常用于用户名等   2.相等验证     常用于验证两次输入的密码   3.范围验证  ...

    二十三年蝉
  • 金融系统中正确的金额计算及存储方式

    昨天微信群里在讨论金额计算及存储的话题,今天特来结贴一下。 经典的精度丢失问题 Java中的类型float、double用来做计算会有精度丢失问题,下面来看下面...

    Java技术栈
  • 使用BigDecimal 进行浮点值的精确计算

    输出打印为: b1=>7.2882 b2=>7.1 7.22-7.0=0.1882

    Dream城堡
  • 漫话:如何给女朋友解释为什么Windows上面的软件都想把自己安装在C盘

    周末,我在家里面看电视,女朋友正在旁边鼓捣她的电脑,但是好像并不是很顺利,于是就有了以下对话。

    小白学视觉
  • 系统盘为啥往往是C盘?软件为啥希望把自己装在C盘上?

    周末,我在家里面看电视,女朋友正在旁边鼓捣她的电脑,但是好像并不是很顺利,于是就有了以下对话。

    Java3y
  • 漫话:如何给女朋友解释为什么Windows上面的软件都想把自己安装在C盘

    内部存储器,就是我们通常说的内存,内存的信息存取速度很快,但是通常容量较小,并且依赖电源,断电后其中存储的内容就会丢失。内部存储器包括寄存器、高速缓冲存储器(C...

    帅地
  • 强化学习方法汇总,以及他们的区别

    了解强化学习中常用到的几种方法,以及他们的区别, 对我们根据特定问题选择方法时很有帮助. 强化学习是一个大家族, 发展历史也不短, 具有很多种不同方法. 比如...

    机器人网
  • 搞它!!! 深入介绍iptables防火墙管理工具

    Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制。属于典型的包过滤防火墙。linux系统的防火墙体系基于内核编码实现,具有非常稳定的...

    不吃小白菜

扫码关注云+社区

领取腾讯云代金券