Double parseDouble在添加数字时添加额外的0&s

时间:2013-05-02 23:50:39

标签: java android double

我正在经历一些奇怪的情况。我使用Double parseDouble计算数字。在某些情况下,我得到额外的0,而不是109.1我得到... 109.10000001。

我正在尝试从json添加字符串。

这是我正在执行的代码行。

points = points + Double.parseDouble(x.points);

3 个答案:

答案 0 :(得分:3)

Java使用IEEE浮点数作为其double(和float)数据类型。 double具有很高的精度,但不是无限精度。有些数字只是近似值。

此外(没有双关语),添加这样的数字会使浮点错误复杂化。最终,错误足以引起注意,例如您的问题。

如果您可以接受性能影响,请使用BigDecimal,这是任意精度。

答案 1 :(得分:1)

它可能与Double.parseDouble无关,而是浮点精度问题。浮点数和双精度数以二进制形式编码为尾数和指数。小数点后面的部分是一个特殊问题,因为在基数10中可以很容易地表示的内容不一定能在基数2中很好地表示。例如,十进制数0.2在二进制中变为无限重复,而非十进制中的1/3(0.333) ...)。我建议将四舍五入到固定的数字进行显示,或者使用java.math.BigDecimal代替。

答案 2 :(得分:0)

这实际上有一个非常复杂的答案,但基本上浮点数通常只是你给它的数字的近似值。

wikipedia的一个很好的例子是0.1,浮点数为0.009999999776482582092285156250。