如何计算给定数字的位数?

我希望用户输入一个数字并打印回该数字的位数。


我知道我可以使用length,但我的作业要求while循环。


这是我到目前为止:


var num;

var count = 0;


num = prompt('Enter number: ');


function counter(x, y) {

  while (x > 0) {

    y++;

    x /= 10;

  }

  return y;

}


var result = counter(num, count);


console.log(result);


当我给出数字3456(示例)时,我会得到数字328。我希望它打印回数字4。


梵蒂冈之花
浏览 244回答 3
3回答

小唯快跑啊

这一行: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 numbersvar 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);

慕虎7371278

正如其他人指出的那样,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=0x=345.6, y=1x=34.56, y=2x=3.4560000000000004, y=3x=0.3456, y=4x=0.03456, y=5...您希望循环在 处停止0.3456,但这仍然不止于0。(这个错误实际上让你有机会学到一些额外的东西:你能解释一下为什么循环会结束吗?)希望这会给你足够的提示来完成家庭作业——记住调试是编程中极其重要的部分。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript