欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Double

程序员文章站 2024-03-01 11:12:52
...

    以前听别人说,出现下面这种情况是JDK的BUG,然而……

    

    @Test
    public void test1() {
        Double a = 2.0D;
        Double b = 1.9D;
        System.out.println(a - b);
    }

    凭感觉而言,输出应该是:0.1

    感觉终究是感觉,事实输出的是如下结果:

0.10000000000000009

    为什么这样?在10进制系统中,1/3如何表示?0.333333……,无法精确表示,同样,在二进制系统中,1/10怎么表示呢?一样无法精确表示。所以出现了上面这种情况,专业名词应该叫做:舍入误差。

    Java的双精度底层是二进制实现,而二进制没法好好好好表示1/10,产生了舍入误差,所以,正确的姿势应该是使用BigDecimal。

    金额相关计算,应该严禁使用Double。

转载于:https://my.oschina.net/vright/blog/1599916