我的编码遇到了一个相当不寻常的情况。我开发了这个应用程序,它已经在过去6个月内使用,没有任何错误。
为了简化我的问题..我使用十进制格式来舍入数字,并确保它们是2位小数,这已经完美地运作。
然而,出现了一个问题,这个问题被发回给我,据说除了这个特定的一个案例之外,其他所有案例都有效,而且似乎特别是4号码?
案例:
总计= 44.75 平均值= 4.475 MBW(小数点后2位)= 4.47 NOT 4.48
这让我想知道在舍入时DecimalFormat总是正确的吗?奇怪的是,这是有效的,当它是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不工作???
答案 0 :(得分:0)
这些数字不能完全表示为双精度数。查看表示为double的数字的位模式:
xvdb
你看到第一个略大于精确值,而另一个略小于精确值。所以它向下舍入到4.47。
您还可以尝试以下实验:
1.475 -> 3ff799999999999a
4.475 -> 4011e66666666666
结果是
System.out.println(1.475 - 1);
System.out.println(4.475 - 4);
System.out.println(5.475 - 5);