zoukankan      html  css  js  c++  java
  • 0.1累加100次结果是10吗?

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

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

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

    执行结果如下

    "C:Program FilesJavajdk1.8.0_73injava.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
  • 相关阅读:
    ubuntu 16.04 安装 python selenium
    DNS 小问题
    Ubuntu下安装setuptools
    ubuntu16.04LTS更换阿里源
    Ubuntu下安装 Phantomjs
    root和user切换
    Navicat破解安装教程
    urllib2
    MySQL划重点-查询-聚合-分组
    vi编辑器
  • 原文地址:https://www.cnblogs.com/coisini/p/12123471.html
Copyright © 2011-2022 走看看