JavaScript |数字位数的总和

时间:2018-06-20 11:23:33

标签: javascript node.js numbers integer

我在解决一个难题,就是不计算数字中的数字。下面是代码:

 function countDigits(n) {
 console.log(n);
 let count = 0;
 while (n > 0) {
     let d = n % 10;
     count += d;
     n = Math.floor(n / 10);
 }
 return count; }

大多数文本案例都通过了,除非没有通过。输入的位数超过17。

测试用例:

  • n = 3546630947312051453014172159647935984478824945973141333062252613718025688716704470547449723886626736

    预计:446

    获得:380

  • n = 35466309473120515

    预计:64

    获得:65

在网上浏览了一些帖子之后,我知道对于一个实例,如果数字超过17位,JavaScript将截断值:

var a = 35466309473120515
console.log(a) // a => 35466309473120516

要在其API中解决此问题,Twitter会以字符串而非数字的形式发送花呢ID。更多详细信息here

但就我而言,我无法控制输入值。如果值超出输入范围(> 17),则将其转换为字符串。

请让我知道如何解决此问题。

1 个答案:

答案 0 :(得分:0)

javascript中的数字存储在64位上:53位表示整数值+ 11位表示尾数:

因此,Number.MAX_SAFE_INTEGER === 9007199254740991是可以使用的最大整数,而不会损失精度。

如果您的输入值为字符串,则可以简单地

  1. 检查它是否仅包含带有正则表达式的数字

  2. 获取字符串长度

编辑:帖子标题是计算位数,但您的代码实际上是求和位数。你到底想要什么?