java中小数用float和double表示:
float 4个字节(单精度)
double 8个字节(双精度)
在数学的计算中 0.2*0.2的结果为0.04,但是为啥计算机中打印出来是0.040000000000000001呢,因为计算机中的存储和运算都是通过二进制来进行实现的,而在二进制中不能准确的表示0.4,只能保存一个无限接近于0.4的一个值。
可以通过十进制转二进制的运算来说明这个:
1.整数部分转整数,小数部分转小数。
2.小数部分:十进制的值一直乘以2;结果如果大于1,整数部分清零(在二进制小数后补1)
结果如果不大于1(在二进制小数后补0)
3.直到结果为1.0则结束。
则0.4转换为二进制小数则为:0.0110011001100110...,后面的“0110”会一直无限的循环下去
所以计算机中就无法用二进制精确的表示0.4,只能取一个最接近的值来表示0.04所以大多数小数在计算机中都是不精确的。