【发布时间】:2013-08-06 14:02:42
【问题描述】:
我有一个愚蠢的问题。 为什么这是给 488.15999999999997 而不是 488.16
double dbl = 427.14 + 61.02;
System.out.println(dbl);
我听说如果我们要考虑这么高的准确性(例如与货币相关的逻辑),我们必须使用 BigDecimal。但我想知道这背后的原因。
【问题讨论】:
-
试试这个IEEE 754 Calculator:粘贴你的十进制值,看看会发生什么。值一千字!
-
感谢大家的cmets。我注意到这个话题在很多地方都有。但我想知道这背后的确切原因。可以减票。我应得的。但是你的参考对我很有帮助。我在java中获得了很多关于浮点值的知识
-
当您使用浮点时,您必须应用适当的舍入。如果你这样做,你可以在交易系统中使用 double,大多数银行使用 double 或 long(固定精度)而不是 BigDecimal,尤其是用 C++ 编写的。
-
的确切原因是,你得到一个数略少于你想到的是,427.14实际上是427.1399999999999863575794734060764312744140625和61.02居然是61.02000000000000312638803734444081783294677734375,当你添加这些你一起寻找最近的双重价值488.15999999999998948396751075051724910736083984375这是稍微低于你的预期。如果将其四舍五入到小数点后 2 位,您将得到预期的答案 488.16