我在编码中遇到了一个相当不寻常的情况。我开发了这个应用程序,它已经使用了 6 个月,没有错误。
为了简化我的问题..我正在使用十进制格式对数字进行四舍五入并确保它们到小数点后 2 位,这一直很完美。
但是,出现了一个问题,这个问题被发回给我,据说除了这个特定的案例之外,其他所有案例都有效,而且似乎只是数字 4?
箱:
总计 = 44.75 平均值 = 4.475 MBW(小数点后 2 位)= 4.47 而不是 4.48
这让我想知道十进制格式在四舍五入时总是正确的吗? 奇怪的是,当它是 1.475 时,它四舍五入到 .48 并且除了 4 之外的每个数字??
有人有什么想法吗?
Java示例:
final DecimalFormat df = new DecimalFormat("#0.00");
weight2 = 4.475
MBW = df.format(weight2);
上面的结果仍然得到 4.47.. 任何正常的四舍五入都应该是 4.48? 这适用于任何其他整数,例如 1.475 是 1.48,2.275 是 2.48......为什么整数 4 不起作用???
这些数字不能完全表示为双精度。查看表示为双精度的数字的位模式:
1.475 -> 3ff799999999999a
4.475 -> 4011e66666666666
您会看到第一个略大于精确值,而另一个略小于精确值。所以它被四舍五入到 4.47。
您还可以尝试以下实验:
System.out.println(1.475 - 1);
System.out.println(4.475 - 4);
System.out.println(5.475 - 5);
结果是
0.4750000000000001
0.47499999999999964
0.47499999999999964