当我的字符串太长时ParseFloat的奇怪行为

时间:2014-12-11 18:13:29

标签: javascript ecmascript-5 parsefloat

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

parseFloat(999999999999999)  //999999999999999

parseFloat(9999999999999999) //10000000000000000

parseFloat(9999999999999899) //9999999999999900

javascript中的parseFloat函数是否有限制?在ECMA Standard之后,没有任何问题。

1 个答案:

答案 0 :(得分:1)

Float不是一个无休止的容器。考虑这个例子:

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

或者,另一个案例:

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

...虽然1e+35仅为1,但35为零。原始数字(9999...)非常大且精确,JS开始剪切lower digits以至少存储某些内容 - 来源太大而无法保存在float中。

这实际上是因为 JavaScript引擎进行的内部float转换而float类型的哲学是更高位数更重要的是强>

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

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