计算机使用二进制运算,程序中的十进制数字先转换成二进制,再进行运算。Float和Double的小数部分在转换为二进制时容易产生无限循坏的情况,通常都是取无限接近于原值的近似值,所以导致出现精度丢失的情况。
例如:十进制小数转换为二进制小数:
十进制小数:12.25
二进制小数:(整数转整数,小数转小数)
12转换为二进制为1100
0.25转换为二进制 0.25*2=0.5
0.5*2=1.0
二进制小数:1100.01
例如: 十进制小数:12.615
二进制小数:(整数转整数,小数转小数)
12转换为二进制为1100
0.615转换为二进制 0.615*2=1.23
0.23*2=0.46
0.46*2=0.92
0.92*2=1.84
0.84*2=1.68
0.68*2=1.36
1.36*2=0.72
0.72*2=1.44 .......
二进制小数:1100.10011101(保留了后八位)
在这种情况下的转换就是不精确的,产生了无限循坏的情况。