V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Clarencep
V2EX  ›  问与答

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

  •  
  •   Clarencep · 2015-06-17 19:58:02 +08:00 · 2113 次点击
    这是一个创建于 3428 天前的主题,其中的信息可能已经有所发展或是发生改变。
    刚刚有人问我的,没想出来,求教各位大牛 -- 按F12打开js控制台,然后输入:
    .1 + .1 == .2 ==> 结果是true
    .1 + .2 == .3 ==> 结果是false --- 为啥是false?求解
    4 条回复    2015-06-17 20:37:53 +08:00
    pangtianyu
        1
    pangtianyu  
       2015-06-17 20:04:36 +08:00
    在计算机里面带小数点的运算是 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  
       2015-06-17 20:27:13 +08:00   ❤️ 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
    pangtianyu
        3
    pangtianyu  
       2015-06-17 20:29:29 +08:00
    @YuJianrong 啊 是这样嘛 受教了
    blacktulip
        4
    blacktulip  
       2015-06-17 20:37:53 +08:00
    二进制十进制来回转换的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5548 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:30 · PVG 16:30 · LAX 00:30 · JFK 03:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.