这种舍入误差的主要原因是:
浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10。
这 就好像十进制无法精确地表示分数 1/3—样。
如果在数值计算中不允许有任何舍入误差, 就应该使用 BigDecimal类。
浮点数值不适用于无法接受舍入误差的金融计算中。
例如,命令 System.out.println ( 2.0-1.1 ) 将打印出 0.8999999999999999, 而不是人们想象的 0.9。
为什么二进制无法精确表示1/10
其实跟数位表示法有关,比如十进制的情况下:
123,相当于(值*进制^位置,个位0,十位1,百位2)
同理:1/10由二进制表示小数的时候只能够表示能够用1/(2^n)
例如:
0.5能够表示,因为它可以表示成为
0.75也能够表示,因为它可以表示成为