对于特定情况,DecimalFormat不能正确舍入

时间:2018-01-16 17:45:13

标签: java android rounding decimalformat

我的编码遇到了一个相当不寻常的情况。我开发了这个应用程序,它已经在过去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不工作???

1 个答案:

答案 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);