java中的双数据类型的十进制值冲突

时间:2013-08-06 14:02:42

标签: java double

我有一个愚蠢的问题。 为什么这给了488.15999999999997而不是488.16

double dbl = 427.14 + 61.02;
System.out.println(dbl);

我听说如果我们考虑这么高的准确性(如货币相关逻辑),我们必须使用BigDecimal。但我想知道这背后是什么。

2 个答案:

答案 0 :(得分:1)

这是“正常”行为。请记住,对于一般情况,十进制值无法在计算机中准确表示,因此很少有错误会开始蔓延。看一下What Every Computer Scientist Should Know About Floating-Point Arithmetic,对于任何编写处理十进制值的代码的人来说,这是必读的。

答案 1 :(得分:1)