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
上一篇: php简单统计中文个数的方法