开发者问题收集

在 JavaScript 中从整数四舍五入为整数?

2022-01-02
135

所以我有一些数字 x = 320232 y = 2301 z = 12020305 。我想使用 JavaScript 将这些数字四舍五入,使它们变为 x = 320000 y = 2300 z = 12000000

我尝试了 Math.roundMath.floor ,但结果发现它们只适用于小数值,如 a = 3.1; Math.round(a); // 输出 3 ,而不是整数。

所以我的问题是,我们是否可以使用 JavaScript 对整数进行四舍五入?如果可以,那么怎么做?

编辑:我希望将其四舍五入到上面的变量中所示的起始 3 位数字。例如如果有另一个变量名为 c = 423841 它应该四舍五入为 c = 424000

3个回答

您可以使用十的对数并调整数字。

const
    format = n => v => {
        if (!v) return 0;
        const l = Math.floor(Math.log10(Math.abs(v))) - n + 1;

        return Math.round(v / 10 ** l) * 10 ** l;
    };

console.log([0, -9876, 320232, 2301, 12020305, 123456789].map(format(3)));
Nina Scholz
2022-01-02

解决方案是首先计算需要舍去多少个数字,然后在舍入中使用该数字。

Math.round(1234/100)*100 将舍入为 1200 ,因此我们可以使用它进行舍入。然后,我们只需要确定在此示例中用什么替换 100。

也就是说,它将是 1,后跟 LENGTH - 3 个零。该数字可以计算为 10 的 LENGTH - 3 次方,在 JS 中: 10 ** (length - 3)

var x = 320232;
var y = 2301;
var z = 12020305;

function my_round(number){
  var org_number = number;
  
  // calculate integer number
  var count = 0;
  if (number >= 1) ++count;

  while (number / 10 >= 1) {
    number /= 10;
    ++count;
  }
  
  // length - 3
  count = Math.round(count) - 3;
  if (count < 0){
    count = 0;
  }
  
  // 10 to the power of (length - 3)
  var helper = 10 ** count;
  
  return Math.round(org_number/helper)*helper;
}

alert(my_round(x));
alert(my_round(y));
alert(my_round(z));

这不是最漂亮的代码,尽管我试图使其成为可解释的代码。

Dennis van de Hoef - Xiotin
2022-01-02

这应该可行:

function roundToNthPlace(input, n) {
    let powerOfTen = 10 ** n
    return Math.round(input/powerOfTen) * powerOfTen;
}

console.log([320232, 2301,12020305, 423841].map(input => roundToNthPlace(input, 3)));

Output: [320000, 2000, 12020000, 424000]
Nikhil Pathania
2022-01-02