0.1累加100次结果是10吗?

 

首先明确,不是,是的结果不是10

因为,相加过程中所得到的小数,无法精确的表达成对应的二进制数。

        float sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += 0.1;
        }
        System.out.println(sum); 

执行结果如下

"C:\Program Files\Java\jdk1.8.0_73\bin\java.exe" ...
10.000002

Process finished with exit code 0

 

为什么在程序中0.1累加100次结果不是10呢?

其实和计算机的进制转换有关。所有的运算都会被计算机转换成二进制进行操作。但是,有些十进制小数无法精确的转换成二进制。

例如1/3=0.333... 无限循环,不能用十进制精确表示,又怎么准确转换成二进制呢?遇到这种情况计算机会根据变量数据类型所对应得长度,将数据截断或者四舍五入。

二进制0.0000~0.1111对应的十进制罗列如下

二进制数  对应的十进制数
0.0000 0
0.0001 0.0625
0.0010 0.125
0.0011 0.1875
0.0100 0.25
0.0101 0.3125
0.0110 0.375
0.0111 0.4375
0.1000 0.5
0.1001 0.5625
0.1010 0.625
0.1011 0.6875
0.1100 0.75
0.1101 0.8125
0.1110 0.875 
0.1111 0.9375

posted on 2019-12-31 11:15  爪哇玛咖  阅读(468)  评论(0编辑  收藏  举报

导航