所有double的Java总和不返回预期结果

Jac*_*ack 3 java double sum floating-accuracy decimalformat

可能重复:
在double中移动小数位

为什么以下数字总和不等于0.4622?但0.46219999999999994

Double total = new Double(0.08) + new Double(0.0491) + new Double(0.3218) + 
         new Double(0.0113) + new Double(0.0); // = 0.46219999999999994
Run Code Online (Sandbox Code Playgroud)

我有一个检查用户输入的应用程序.

用户输入5个十进制数和一个总数.应用程序检查komma后面4位小数的所有5个数字的总和是否等于总数.

限制它给了我0.4621不等于0.4622.我不能使用DecimalFormat,因为它将它向上舍入.如果我明确地说,向下舍入,那么这种情况就会失败.

关于如何解决这个问题的任何建议?

par*_*lov 10

试试吧java.math.BigDecimal.双轮结果.你只需要使用add方法,而不是+运算符.


Nar*_*hai 5

避免使用float和double如果确切的答案是required--项目48 -有效的Java第二版

使用BigDecimal来代替。