Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javascript查找超级数字,CMD中出现NaN错误_Javascript_Node.js - Fatal编程技术网

使用Javascript查找超级数字,CMD中出现NaN错误

使用Javascript查找超级数字,CMD中出现NaN错误,javascript,node.js,Javascript,Node.js,我试图在JS中找到一个数字的超位数 当我在代码5678572322239898999中使用此长度的数字时,会发生NaN错误,但当我使用5678572322239899时,不会发生错误 注意:第一个数字有22个字符,而第二个数字有21个字符。我真的不明白为什么字符长度应该是一个问题,或者它是我的代码 我正在使用node 10.11.0并在CMD中运行代码 var number = 5678572322398989898991; var total = number + ''; while(tot

我试图在JS中找到一个数字的超位数

当我在代码5678572322239898999中使用此长度的数字时,会发生NaN错误,但当我使用5678572322239899时,不会发生错误

注意:第一个数字有22个字符,而第二个数字有21个字符。我真的不明白为什么字符长度应该是一个问题,或者它是我的代码

我正在使用node 10.11.0并在CMD中运行代码

var number = 5678572322398989898991;
var total = number + '';

while(total.length > 1) {
  var temp = 0;
  for(var i = 0; i < total.length; i++) {
     temp += +total[i];    
  }
  console.log(temp);
  total = temp + '';
  }    
console.log(total);
var编号=56785723239891;
var总计=数量+“”;
而(总长度>1){
var-temp=0;
对于(变量i=0;i
替换两个数字并查看其行为…具有22个字符的一个在CMD中有一个NaN错误,而另一个没有错误并显示结果。

第一个(
567857239239898999
)字符串化为科学符号:
“5.67857232239899e+21”
。这导致计算
5+(++”)
;但是由于
+“
NaN
,因此结果是
NaN
(当其中一个操作数是
NaN
时几乎总是这样)。这将传播到最终结果

第二个(
56785723423989899
)字符串化为一个看起来像整数的
“567857239239899000000”
;如果没有奇怪的非数字,
NaN
永远不会出现。但是,请注意,它超过了
Number.MAX_SAFE_INTEGER
9007199254740991
),因此会失去精度,这可能会使您的结果不是您想要的结果

您可以首先从一个字符串开始,或者使用
BigInt
(大整数)来解决这个问题,您可以通过在数字文本中添加
n
567857239899n
)作为后缀来解决这个问题。请注意,虽然大整数在Node和Chrome中工作,但它们在几乎任何其他JS实现中都不可用。

第一个(
567857239239898999
)严格化为科学符号:
“5.67857232239899e+21”
。这导致计算
5+(++”)
;但是由于
+“
NaN
,因此结果是
NaN
(当其中一个操作数是
NaN
时几乎总是这样)。这将传播到最终结果

第二个(
56785723423989899
)字符串化为一个看起来像整数的
“567857239239899000000”
;如果没有奇怪的非数字,
NaN
永远不会出现。但是,请注意,它超过了
Number.MAX_SAFE_INTEGER
9007199254740991
),因此会失去精度,这可能会使您的结果不是您想要的结果


您可以首先从一个字符串开始,或者使用
BigInt
(大整数)来解决这个问题,您可以通过在数字文本中添加
n
567857239899n
)作为后缀来解决这个问题。请注意,虽然大整数在Node和Chrome中工作,但它们不可用(目前)在几乎所有其他的JS实现中。

我已经尝试了第一个将其作为字符串使用的解决方案,它很有效……您介意告诉我在这种特殊情况下如何实现BigInt吗……因为MDN和其他站点中的解决方案在实现中仍然给我带来了一些困难我做到了:改用
567857239899N
我已经尝试了将它作为字符串使用的第一个解决方案,它很有效…你介意告诉我在这种特殊情况下如何实现BigInt吗…因为MDN和其他站点中的解决方案仍然给我在实现中带来一些困难我做到了:使用
5678572392398999n
而不是
5678572321398999