我面临着奇怪的问题。
parseFloat(11111111111111111)
将其转换为11111111111111112
。
我注意到它在length is 16
之前工作正常,但在输入length is > 16.
我希望在执行后保留parseFloat
中传递的原始值。
任何帮助?
答案 0 :(得分:2)
整数(没有句号或指数表示法的数字)被认为是最准确的15位数。
更多信息here
答案 1 :(得分:1)
javascript中的数字使用64位浮点值表示(在其他语言中称为doubles
)。
doubles
最多可以保留15/16位有效数字(取决于数字大小)。由于double的范围是1.7E +/- 308,因此某些数字只能通过double
进行近似,在您的情况下,11111111111111111无法准确表示但是通过11111111111111112值进行近似。如果这听起来很奇怪,那么请记住,0.3也不能完全表示为双倍。
double
可以保持范围+/- 2 ^ 53中的精确整数值 - 您可能需要精确值。
答案 2 :(得分:1)
Javascript有一个常量Number.MAX_SAFE_INTEGER,它是可以精确表示的最高整数。
此上下文中的安全性是指能够准确表示整数并正确比较它们的能力。例如,Number.MAX_SAFE_INTEGER + 1 === Number.MAX_SAFE_INTEGER + 2将评估为true,这在数学上是不正确的。
值为9007199254740991(2 ^ 53 - 1),最多可保证15位数。
答案 3 :(得分:0)
尝试使用一元+
运算符。
喜欢这个+(“1111111111111111”)+ 1 = 1111111111111112
答案 4 :(得分:0)
正如您在following blog post中看到的,JavaScript仅支持53位整数。
如果您输入控制台
var x = 11111111111111111
然后输入
x
你会得到的
11111111111111112
这与parseFloat
方法无关。
还有一个关于在JavaScript中处理大数字的相关问题here。
答案 5 :(得分:0)
BigInt是一个内置对象,它提供了一种表示大于253-1的整数的方法,这是JavaScript可以使用Number原语可靠地表示的最大数字。
BigInt可用于任意大的整数。