如果你这样做
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"