【问题标题】:Odd behavior with ParseFloat when my string is too long当我的字符串太长时 ParseFloat 的奇怪行为
【发布时间】:2014-12-11 18:13:28
【问题描述】:

我正在制作一个计算器(类似于 javascript 中的 excel),我发现 ParseFloat 有一个奇怪的行为。

parseFloat(999999999999999)  //999999999999999

parseFloat(9999999999999999) //10000000000000000

parseFloat(9999999999999899) //9999999999999900

javascript 中的 parseFloat 函数有限制吗?关注ECMA Standard 没有这方面的问题。

【问题讨论】:

标签: javascript ecmascript-5 parsefloat


【解决方案1】:

Float 不是一个无限容器。考虑这个例子:

console.log(0.1 + 0.2 == 0.3) // Prints... FALSE!

或者,另一种情况:

console.log(99999999999999999999999999999999999) // Prints 1e+35

...而1e+35 只是135 零。原始数字 (9999...) 如此庞大和精确,以至于 JS 开始切割 lower digits 以至少存储一些东西 - 源太大而无法保存在 float 中。

这实际上是由于 JavaScript 引擎 进行了内部float 转换,而float 类型的理念是较高的数字比较低的数字更重要

你的情况有点类似。这是因为浮点类型accuracy 取决于它的值长度。因此,如果您的值太大或太小,您将失去较低数字的精度。

因此,您永远不应该信任 float 并且永远不要使用 '==' of '===' 将其与其他值进行比较 - 它可能是任何值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    相关资源
    最近更新 更多