0

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

parseFloat(999999999999999)  //999999999999999

parseFloat(9999999999999999) //10000000000000000

parseFloat(9999999999999899) //9999999999999900

javascript中的parseFloat函数有限制吗?遵循ECMA 标准,这没有问题。

4

1 回答 1

1

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

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

或者,另一种情况:

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

...而只是1e+35零。原始数字 ( ) 如此庞大和精确,以至于开始切割以至少存储一些东西 - 源太大而无法保存。1359999...JSlower digitsfloat

这实际上是由于JavaScript 引擎进行的内部float转换而发生的,并且类型的理念是高位比低位更重要float

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

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

于 2014-12-11T18:16:25.917 回答