为什么大部分小数在计算机中是不精确的
现实生活中小数是以十进制进行存储的,而在计算机中是采用二进制存储的;
因此在将小数存入计算机中时,从十进制转为二进制
第一步,将 整数部分除 2 取余 ,直到商为 0 为止,然后依次 将所得余数逆向排列 ,得到整数部分的二进制结果
第二步,将 小数部分乘 2 取整,直到小数部分为 0 为止,然后依次 将所得整数顺向排列 ,得到小数部分的二进制结果
但是,在转换过程中二进制只能精准表示2的某次方之和
其它数值只能表示出近似值
| 2的N次方 | 对应十进制数 |
|---|---|
| 2 | 4 |
| 1 | 2 |
| 0 | 1 |
| -1 | 0.5 |
| -2 | 0.25 |
| -3 | 0.125 |
当我们从计算机中取出存放的小数值时,有些数值便不能精确显示,
示例:
//当结果是2的某次方之和时能精确表示
System.out.println((float)0.5*0.5); //0.25
//当结果不是2的某次方之和时不能精确表示
System.out.println((float)0.2*0.2); //0.04000000059604645(原值应为0.4)
本文揭示了计算机存储小数时遇到的精度问题,由于二进制无法精确表示所有十进制小数,导致非2的幂次小数在转换过程中出现近似值。通过实例说明了这种现象,并解释了原因。

被折叠的 条评论
为什么被折叠?



