gpt4 book ai didi

java - 对于特定情况,DecimalFormat 未正确舍入

转载 作者:太空宇宙 更新时间:2023-11-04 10:47:01 25 4
gpt4 key购买 nike

我在编码中遇到了一个相当不寻常的场景。我开发了这个应用程序,并且在过去 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com