3 回答

TA貢獻(xiàn)1863條經(jīng)驗 獲得超2個贊
這一行:
x /= 10;
應(yīng)改為:
x = Math.floor(x / 10);
邏輯假設(shè)整數(shù)除法:1234 應(yīng)該變成 123、12、1 和 0。JavaScript 沒有內(nèi)置整數(shù)除法,因此您需要使用Math.floor它來模擬它。帶有一些修復(fù)的完整示例:
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貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊
問題是除法運算最終會轉(zhuǎn)換x為浮點數(shù),你會得到類似的結(jié)果:
x / 10 === 0.1;
x / 10 === 0.01;
x / 10 === 0.001;
....
如果您總是將除法結(jié)果解析(四舍五入)為一個整數(shù),您將得到預(yù)期的結(jié)果。
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貢獻(xiàn)1802條經(jīng)驗 獲得超4個贊
正如其他人指出的那樣,y不需要是參數(shù),它可以是局部變量。但這不是你的問題;讓我們?yōu)槟难h(huán)添加一些額外的日志記錄:
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
...
您希望循環(huán)在 處停止0.3456,但這仍然不止于0。(這個錯誤實際上讓你有機(jī)會學(xué)到一些額外的東西:你能解釋一下為什么循環(huán)會結(jié)束嗎?)
希望這會給你足夠的提示來完成家庭作業(yè)——記住調(diào)試是編程中極其重要的部分。
添加回答
舉報