浮点数值不适用于无法接受舍入误差的计算中。
舍入误差的主要原因在于浮点数值采用二进制系统表示,而二进制系统中无法精确地表示分数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同样存在这个问题
网友评论