【问题标题】:Why does Javasript's strict comparison act the way it does? [duplicate]为什么 Javasript 的严格比较会这样? [复制]
【发布时间】:2010-02-16 00:29:17
【问题描述】:

可能重复:
Is JavaScript’s math broken?

如果 Javascript 的“严格比较”操作符与传统操作符的主要区别在于类型强制,为什么会这样

0.1+0.2===0.3;

返回假?

【问题讨论】:

标签: javascript comparison operators strict


【解决方案1】:

在 Firefox 和 Chrome 中,0.1 + 0.20.30000000000000004,不等于 0.3。这可能是因为无法将0.1 完全表示为浮点数。

【讨论】:

    【解决方案2】:

    因为 0.1 很棘手
    它是 irrational 在二进制中重复出现(参见 cmets)

    编辑
    实际上,我正在这里飞行,我不确定。有没有可以反驳或提供证明的 Math.boffin?
    会很有趣

    【讨论】:

    • "Irrational" 不正确 - 1 / 10 是一个有理数,无论您将内容存储在什么基数中。但是,它 循环二进制,所以不可能使用普通的浮点表示来准确地表示它。
    • 十进制的 0.1 是 0.00011001100110011... 以二进制重复。
    • 理性可以表示为一个分数 - 我很傻。你能解释一下为什么它会反复出现吗?
    • 在二进制中,点后的每个数字代表 1/2、1/4、1/8、1/16,就像在十进制中它是 1/10、1/100、1/1000 .仅使用这些二进制分数,你永远不可能精确地加起来 1/10。你能得到的最接近的是 1/16 + 1/32 + 1/256 + 1/512 + .... (0.0001100110011...)
    • IEEE 标准 (754) 规定以这种方式存储小数。
    猜你喜欢
    • 2019-05-20
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 2021-02-20
    相关资源
    最近更新 更多