Clarencep
V2EX  ›  问与答

.1 + .2 为什么不等于.3?

  •  
  •   Clarencep · Jun 17, 2015 · 2626 views
    This topic created in 4010 days ago, the information mentioned may be changed or developed.
    刚刚有人问我的,没想出来,求教各位大牛 -- 按F12打开js控制台,然后输入:
    .1 + .1 == .2 ==> 结果是true
    .1 + .2 == .3 ==> 结果是false --- 为啥是false?求解
    4 replies    2015-06-17 20:37:53 +08:00
    expireddessert
        1
    expireddessert  
       Jun 17, 2015
    在计算机里面带小数点的运算是 approximate 的 不是精确的
    可以参考这里: http://www.zhihu.com/question/31182792
    还有 https://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0

    顺便结果:
    > .1+.2
    0.30000000000000004
    > .3
    0.3
    YuJianrong
        2
    YuJianrong  
       Jun 17, 2015   ❤️ 1
    @pangtianyu 这个说法并不十分准确。
    准确地说是部分十进制小数没有有限位数的IEEE754浮点二进制表达。

    所以:
    1. 如果相加的两个小数(以及结果)都能被有限位数(而且在 float/double 位数内)浮点二进制表达,那么结果是精确的。
    比如 0.25 + 0.5 === 0.75 这是绝对精确的。
    2. 如果相加的两个小数并没有有限位数的 IEEE754浮点二进制表达(比如0.1的浮点表达为1.(1001) *2^(-4) ,其中1001为循环节),那么相加的结果就很有可能不符合预期,因为很难加到同样是数值近似的结果上。

    参考 https://zh.wikipedia.org/wiki/IEEE_754
    expireddessert
        3
    expireddessert  
       Jun 17, 2015
    @YuJianrong 啊 是这样嘛 受教了
    blacktulip
        4
    blacktulip  
       Jun 17, 2015
    二进制十进制来回转换的问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3771 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 00:18 · PVG 08:18 · LAX 17:18 · JFK 20:18
    ♥ Do have faith in what you're doing.