我在解决一个难题,就是不计算数字中的数字。下面是代码:
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),则将其转换为字符串。
请让我知道如何解决此问题。
答案 0 :(得分:0)
javascript中的数字存储在64位上:53位表示整数值+ 11位表示尾数:
因此,Number.MAX_SAFE_INTEGER === 9007199254740991是可以使用的最大整数,而不会损失精度。
如果您的输入值为字符串,则可以简单地
检查它是否仅包含带有正则表达式的数字
获取字符串长度
编辑:帖子标题是计算位数,但您的代码实际上是求和位数。你到底想要什么?