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

Odd behavior with ParseFloat when my string is too long

本文关键字:ParseFloat 字符串 我的      更新时间:2023-09-26

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

parseFloat(999999999999999)  //999999999999999
parseFloat(9999999999999999) //10000000000000000
parseFloat(9999999999999899) //9999999999999900

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

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,也不应该使用"==="的"=="将其与其他值进行比较 - 它可能是任何东西。