Java中的小数(float、double)是不精确的。
0.1 用二进制表示为:0.000110011...
求0.1的二进制 小数点后1位:0.1x2=0.2 0 小数点后2位:0.2x2=0.4 0 小数点后3位:0.4x2=0.8 0 小数点后4位:0.8x2=1.6 1 小数点后5位:0.6x2=1.2 1 小数点后6位:0.2x2=0.4 0 小数点后7位:0.4x2=0.8 0 小数点后8位:0.8x2=1.6 1 小数点后9位:0.6x2=1.2 1 小数点后10位: 0.2x2=0.4 0
把上边的求解结果拼凑就得到0.1的二进制结果:0.000110011...
0.1的二进制
由此可见,0.1用二进制表示是一个无限循环的数,计算机只存了前几位,所以Java小数不是精确的。
还没有评论,来说两句吧...