Number()函数在某些参数上返回不正确的值,如下所示:
Number('10000000712224641') returns 10000000712224640
Number('10000000544563531') returns 10000000544563532
我在Firefox,Chome,IE和Node.js上测试了这个。为什么会这样?
答案 0 :(得分:8)
JavaScript安全地支持大约17位数字,所有数字,无论是浮点数还是整数,都以64位IEEE-754二进制浮点表示。
@+id/total_text_view
当你超过这个数字时,除非你有2的幂(或增加2的幂),否则尾随数字会被舍入。
Number.MAX_SAFE_INTEGER // 9007199254740991
答案 1 :(得分:7)
Javascript uses 64-bit IEEE-754 binary floating point to store all numbers - 例如C#和Java中的double
。存储整数的类型不同。 (实际实现可能会使用优化来避免始终以这种方式执行算术,但从最终用户的角度来看,结果总是,好像每个数字都被视为64位二进制浮点值。)
这意味着只有52位可用于存储有效位数,其他位用于指数和符号。通过规范化,这意味着您可以有效地存储53个精确位的值。这意味着超过2 53 -1(这是其他答案中引用的值9007199254740991),“相邻”数字之间的距离大于1,因此您无法准确存储所有整数。 / p>
答案 2 :(得分:2)
这是因为javascript支持多个数字。可能的最大安全整数存储在一个名为MAX_SAFE_INTEGER的常量中,该常量包含值9007199254740991。