3 回答
TA贡献1863条经验 获得超2个赞
这一行:
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);
TA贡献1815条经验 获得超6个赞
问题是除法运算最终会转换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);
TA贡献1802条经验 获得超4个赞
正如其他人指出的那样,y不需要是参数,它可以是局部变量。但这不是你的问题;让我们为您的循环添加一些额外的日志记录:
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。(这个错误实际上让你有机会学到一些额外的东西:你能解释一下为什么循环会结束吗?)
希望这会给你足够的提示来完成家庭作业——记住调试是编程中极其重要的部分。
添加回答
举报