Javascript数字方法未返回预期值

Javascript数字方法未返回预期值,javascript,numbers,Javascript,Numbers,我尝试了JavaScriptNumber方法,它返回了意外的结果 如果我将192000000000000005值传递到Number()方法中。它返回192000000000000000,而不返回5 如果我传递19200000000000005值,它将返回19200000000000004,这是意外的 这些结果的含义是什么?你也可以找到下面的截图 铬合金控制台: 192000000000000005不能用javascript中的数字表示,因为64位浮点表示的限制 安全的最大整数(即,该整数之前的所

我尝试了JavaScriptNumber方法,它返回了意外的结果

如果我将192000000000000005值传递到Number()方法中。它返回192000000000000000,而不返回5

如果我传递19200000000000005值,它将返回19200000000000004,这是意外的

这些结果的含义是什么?你也可以找到下面的截图

铬合金控制台


192000000000000005不能用javascript中的数字表示,因为64位浮点表示的限制

安全的最大整数(即,该整数之前的所有整数都可以表示为无间隔的整数)为Number.MAX_safe_integer===9007199254740991

你可以看到这是16位数字-所以18位是不安全的,而19位(不管怎样,你从未尝试过)也不起作用-

注意,MAX_SAFE_INTEGER的实际定义是

最大整数
n
,其中
n
n+1
都可以精确表示为
数字

console.log(9007199254740991)/=>9007199254740991
console.log(9007199254740992)/=>9007199254740992

console.log(9007199254740993)/=>9007199254740992
请参见
Number.MAX\u SAFE\u INTEGER
-该数字比最大“SAFE”大21倍可由浮点表示的整数JavaScript数字始终是64位浮点数字。如果我传递19位数字,它将返回为18位数字?您试图生成的数字太大,无法精确表示。让我为您省去更多询问此问题的麻烦<由于64位浮点表示的限制,javascript中的代码>192000000000000005不能用
数字
表示。。。安全的最大整数(即,该整数之前的所有整数都可以无间隔表示)是Number.MAX_safe_integer===9007199254740991-您可以看到这是16位-因此18位不安全,19位(无论如何,您从未尝试过)也不起作用-注意9007199254740991是
2**53-1
-64位浮点有53位尾数