我正在制作一个计算器(类似于javascript中的excel),我发现了ParseFloat的奇怪行为。
parseFloat(999999999999999) //999999999999999
parseFloat(9999999999999999) //10000000000000000
parseFloat(9999999999999899) //9999999999999900
javascript中的parseFloat函数是否有限制?在ECMA Standard之后,没有任何问题。
答案 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
并且永远不要将它与使用'=='的'=='的其他值进行比较 - 它可能是任何东西。