原因:
由于浮点数在计算机中是以二进制形式存储的,而某些十进制小数无法精确地用二进制表示。这种问题在许多编程语言中都很常见,包括Java。
为什么会出现精度问题?
浮点数在计算机中是以 IEEE 754 标准的二进制格式存储的。某些十进制小数(如 1.89)无法精确地表示为二进制小数,因此在存储时会被近似表示。这种近似会导致精度误差。
哪些数字可能会出现类似问题?
许多十进制小数在转换为二进制时都会出现精度问题。以下是一些常见的例子:
1.89
实际存储:1.8900000000000001
原因:1.89 无法精确表示为二进制小数。
0.1
实际存储:0.10000000000000001
原因:0.1 无法精确表示为二进制小数。
0.2
实际存储:0.20000000000000001
原因:0.2 无法精确表示为二进制小数。
0.3
实际存储:0.30000000000000004
原因:0.3 无法精确表示为二进制小数。
1.1
实际存储:1.1000000000000001
原因:1.1 无法精确表示为二进制小数。
2.3
实际存储:2.3000000000000003
原因:2.3 无法精确表示为二进制小数。

解决办法

 BigDecimal bd = new BigDecimal(numberValue).setScale(2, BigDecimal.ROUND_HALF_UP);
        double formattedNum = bd.doubleValue();
        System.out.println(formattedNum);

posted on 2025-04-27 19:45  哑吧  阅读(40)  评论(0)    收藏  举报