javascript大整数因为精度?(为什么?)

tyo*_*213 4 javascript precision safari google-chrome

如果你在chrome或safari中键入78764357878563812,那么你就得到了

如果你这样做

for(var i = 0; i < 30; i++){console.log(i + " == " + 78764357878563800 + " ? ");console.log((78764357878563790+i) == 78764357878563800);}
Run Code Online (Sandbox Code Playgroud)

你开始比较从78764357878563790到78764357878563790 + 29的值,所以...就像你看到你运行它,你从i = 8到24得到真实.

所以我不知道我是不是得到它,但不应该存在maxint(我不知道)和maxint-1 ??? 然后最大不同于maxint-1?

我想这是精确的像浮动数字...但是,这不应该只是命中浮动数字,例如数字+ 1总是给成功者?(所以在上面的例子中,如果i = 78764357878563790并添加i ++,那么你进入一个无限循环.

我事先知道,对于浮点,数字之间存在这种类型的间距,但是从未遇到整数不能表示i + 1和i-1的情况(我总是认为无符号maxint + 1会携带并给出0).

任何建议:

  • 这是最大数量,js中的前数是多少.
  • 如何处理或知道何时整数的这种行为将开始发生.
  • 如何处理这个大数字,比这更大,这将是很好的.

Guf*_*ffa 8

Javascript中没有整数.

数字是双精度浮点数,精度为15-16位.这与您的结果一致.