Java中的小数用float和double表示,小数属于浮点型;
数学的计算中0.1*0.1的结果应当是0.01;但是在计算机中打印出来的结果却是0.010000000000000002,这是为什么呢;主要原因是因为计算机中的存储和运算都是通过二进制实现的;而在二进制中不能精确表示0.1;只能保存一个无限接近0.1的数;所以得到的结果就是不精确的。
根据十进制小数转换成二进制小数的规则:
1.整数部分转整数,小数部分转小数。
2.小数部分:十进制的值一直乘以2;结果如果大于1,整数部分清零(在二进制小数后补1)
结果如果不大于1(在二进制小数后补0)
3.直到结果为1.0则结束。
则0.1转换为二进制小数则为:0.000110011001100...
后续的"1100"会一直无限循环下去;
所以计算机中就无法用二进制精确的表示0.1;
则大部分小数在计算机中是不精确的。