我有一个愚蠢的问题。为什么这是给 488.15999999999997 而不是 488.16
double dbl = 427.14 + 61.02;
System.out.println(dbl);
我听说如果我们考虑这么高的准确性(如货币相关逻辑),我们必须使用 BigDecimal。但我想知道这背后的原因。
如何解决 Java Rounding Double 问题 这个类似问题的答案点在这里 https://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal
这是“正常”的行为。请记住,对于一般情况下,十进制值无法在计算机中精确表示,因此小错误将开始蔓延。看看What Every Computer Scientist Should Know About Floating-Point Arithmetic,对于任何编写处理十进制值的代码的人来说,它都是必读的。