为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2021-12-23 16:15:15
我希望用户输入一个数字并打印回该数字的位数。我知道我可以使用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。
查看完整描述

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);


查看完整回答
反对 回复 2021-12-23
?
红糖糍粑

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);


查看完整回答
反对 回复 2021-12-23
?
慕虎7371278

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。(这个错误实际上让你有机会学到一些额外的东西:你能解释一下为什么循环会结束吗?)


希望这会给你足够的提示来完成家庭作业——记住调试是编程中极其重要的部分。


查看完整回答
反对 回复 2021-12-23
  • 3 回答
  • 0 关注
  • 242 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信