Java中具有双精度的奇怪结果

时间:2013-10-27 05:25:38

标签: java floating-point double

我只是想计算percentage_imp,而不是0.22(正好0.22,没有舍入错误),我得到0.22000000000000003 !! 我曾经得到过类似的奇怪结果,而且我被告知从浮动到双重移动,但这个仍然很奇怪! 以下所有变量都是双倍的!

double percentage_imp= budget -  (sum_minlessi)/ (sum_i + sum_lessi);

3 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

0.22不能表示为双倍。

例如,1/3不能用基数10表示,所以我们用0.3333333333333333近似。

答案 2 :(得分:0)

它在二进制计算中继承了舍入错误。并非所有有理十进制数都可以表示为二进制的单个十进制数。因此,当你执行乘法和除法等操作时,你会在最后几位数上得到一些讨厌的错误。

从double移动到float不会改变这个,因为double只是一个双精度浮点数。

我建议您查看此link

作为java中的额外奖励,尽可能利用任何类型的硬件优化来优化二进制乘法等简单操作,以便在不同的机器上产生不同的答案。如果您需要在所有计算机上保持一致的行为,请在类声明中使用strictfp关键字。