谷歌chrome - javascript大整数round因为精度?(为什么?)

google chrome - javascript large integer round because precision? (why?)

本文关键字:精度 为什么 因为 round chrome javascript 整数 谷歌      更新时间:2023-09-26

如果你这样做

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

你开始比较从78764357878563790到78764357878563790+29的值,所以…如您所见,如果您运行它,从I = 8到24,您将得到true。

所以我不知道如果我没有得到它,但不应该存在的maxint(我不知道)和maxint-1??然后Max和maxint-1不一样?

我想这是精度像浮点数…但这不应该只针对浮点数,例如,数字+1总是给出后继数?(所以在上面的例子中,如果I = 78764357878563790并加上i++,那么你就进入了一个无限循环。

我事先知道这种类型的数字之间的间距存在于浮点数,但从来没有遇到整数不能表示I +1和I -1的情况(我一直认为unsigned maxint +1会进位并给出0)。

有什么建议吗?

  • 这是js中的最大值和前数。
  • 如何处理或知道何时整数将开始发生这种行为。
  • 如何处理这么大的数字,比这个更大的会很好。

Javascript中没有整数

数字是双精度浮点数,其精度为15-16位。

如我所料…所以JS中没有整数

所以你在js中没有整数,就像你在其他语言中指定的那样(它们因此最像一个别名),尽管如果你来自其他有int和unsigned int的语言,并且知道后面的行为,它们会令人困惑。

对于大int型的句柄,我建议自己写成

if(someInt+1 == someInt || someInt-1 == someInt) { //use big number }

之类的,到目前为止我只在js中搜索了BigInt库,在这里找到了整数

的结果
    大整数JavaScript库

对于浮点数

  • JavaScript上的任意精度浮点数
  • Java浮点高精度库

我的三个问题都有了答案。

  • 这是最大的数,什么是js的前数。与Float所能提供的相同……但你会在某些地方开始出现空白……也就是加上+1会得到相同的数字而不是连续的....所以你有两个"最大整型数"一个是你可以加1得到下一个数字的最大整型数,另一个是可以给出64位浮点数的最大整型数。

  • 如何处理或知道整数何时会开始发生这种行为

  • 如何处理这么大的数字,比这个更大的会很好。

使用上述两种方法之一:一个大的int库或检查"someInt+1 == someInt || someInt-1 == someInt"