我在编码中遇到了一个相当不寻常的场景。我开发了这个应用程序,并且在过去 6 个月内一直使用,没有出现任何错误。
为了简化我的问题..我使用decimalFormat对数字进行四舍五入并确保它们精确到小数点后两位,并且这一直工作得很好。
但是,出现了一个发回给我的问题,据说除了这个特定的情况外,其他所有情况都有效,而且似乎特别是数字 4?
案例:
Total = 44.75 Mean = 4.475 MBW (2 decimal places) = 4.47 NOT 4.48
这让我想知道 DecimalFormat 在舍入时总是正确的吗?奇怪的是,当它是 1.475 时,它会四舍五入到 0.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 不起作用???
最佳答案
这些数字不能精确地表示为 double 。查看表示为 double 的数字的位模式:
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
关于java - 对于特定情况,DecimalFormat 未正确舍入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287036/