在Java中可以用double(双精度,8字节)和float(单精度,84字节)来表示小数。
以double为例;在数学计算中,d与c的乘积就等于0.2*0.4=0.08;但在图二中我们可以清楚的看到,计算机中d与c的乘积打印出来的结果却不是0.08。因为计算机中存储和运算都是通过二进制来实现的,而在二进制中不能准确的表示一个小数,只能保存一个无限接近于这个小数本身的值。
我们可以通过十进制转为二进制的运算来解释说明。十进制小数转二进制小数的规则:1.整数转整数,小数转小数; 2.整数部分转二进制为整数除以2;小数部分转二进制为把十进制的小数乘以2,结果大于1则在转换后的小数后记1,结果小于1则在转换后的小数后记0,直到结果为1.0结束。
例:
0.4转换为二进制为0.01100110…(0110循环)。计算机中无法用二进制精确的表示0.4,只能取一个无限接近的值来表示,所以说大部分小数在计算机中都是不精确的。