Double类型运算的精度问题

2020-03-30  本文已影响0人  木木点
GkbxOK.png

浮点数值不适用于无法接受舍入误差的计算中。

舍入误差的主要原因在于浮点数值采用二进制系统表示,而二进制系统中无法精确地表示分数1/10,这就像十进制无法精确的表示分数1/3一样。

所以如果数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。

二进制系统中无法精确地表示分数1/10何解?

1/10换算成二进制为1/1010,结果无限循环的小数,所以二进制无法用有限的位数来表示0.1.

二进制能用有限的位数表示的一些数,比如0.5, 0.25等。

0.5, 0.25换算成二进制为101/1010,11001/1100100,所以二进制能用有限的位数来表示0.5, 0.25等。

十进制无法精确的表示分数1/3同理。

PS:float同样存在这个问题

使用BigDecimal类解决

GkOfSA.png
上一篇下一篇

猜你喜欢

热点阅读