此行:
x /= 10;
应更改为:
x = Math.floor(x / 10);
该逻辑假定整数除法:应该将1234变成123、12、1和0。JavaScript没有内置整数除法,因此您需要使用Math.floor
来模拟它。包含一些修复程序的完整示例:
function countDigits(num) {
var count = 0;
while (num > 0) {
num = Math.floor(num / 10);
count++;
}
return count;
}
var num;
do {
num = Number(prompt("Enter number:"));
} while (Number.isNaN(num));
num = Math.abs(num); // just in case you want to handle -ve numbers
var result = countDigits(num);
console.log(result);
,
问题在于,除法运算最终将把x
转换为浮点数,并且您将得到以下内容:
x / 10 === 0.1;
x / 10 === 0.01;
x / 10 === 0.001;
....
如果您总是将除法结果解析(舍入)为整数,则会得到预期的结果。
var num;
var count = 0;
num = prompt('Enter number: ');
function counter(x,y) {
while (x > 0) {
y++;
x = parseInt(x / 10);
}
return y;
}
var result = counter(num,count);
console.log(result);
,
首先,您应该将输入转换为数字,最好使用+
函数(使用一元5 / 10
具有相同的效果)。
第二个类似0.5
的除法将返回比0
大的1
。相反,您应该检查该数字是否大于或等于function counter(num) {
num = Math.abs(num) / 10;
var count = 1;
while (num >= 1) {
count++;
num /= 10;
}
return count;
}
console.log(counter(+prompt('Enter number: ')));
。
您还可以使用Navigation.findNavController(itemView).navigate(
UIFragmentVideoListDirections.aVideoList2Video((aFile.absolutePath))
)
循环,并避免在循环外进行额外的除法。
,
正如其他人指出的那样,function counter(x) {
let y=0;
while (x > 0) {
console.log("x=" + x + ",y=" + y);
y++;
x /= 10;
}
return y;
}
counter(3456);
不必是参数,它可以是局部变量。但这不是你的问题。让我们在循环中添加一些额外的日志记录:
x=3456,y=0
x=345.6,y=1
x=34.56,y=2
x=3.4560000000000004,y=3
x=0.3456,y=4
x=0.03456,y=5
...
输出看起来像这样:
0.3456
您希望循环在0
处停止,但这还不止{{1}}。 (这个错误实际上使您有机会学习更多的东西:您能解释一下循环为什么会完全结束吗?)
希望这能给您足够的提示来完成作业-记住调试是编程的极其重要部分。
,
您可以通过使用十进制计数的幂再次检查数字。
function counter(value) {
var decimals = 0;
do {
decimals++;
} while (value >= 10 ** decimals)
return decimals;
}
console.log(counter(0));
console.log(counter(1));
console.log(counter(7));
console.log(counter(42));
console.log(counter(999));
console.log(counter(1000));
console.log(counter(1001));
,
请不要使用循环来测量整数的长度...
改为使用数学!对数将为您做得更好。
function numberLength(number) {
return Math.floor(Math.log10(Math.abs(number))) + 1
}
console.log(numberLength(YOUR_NUMBER));
当输入为NaN
时,此代码返回0
。我认为0
的长度取决于您的哲学,因此我不理会这种情况。
本文链接:https://www.f2er.com/3124213.html