JavaScript 中的整数四舍五入?

Rounding-off from whole numbers to whole numbers in JavaScript?

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

我尝试了 Math.roundMath.floor 但事实证明它们只适用于小数值,例如 a = 3.1; Math.round(a); // Outputs 3 而不是整数。

所以我的问题是我们可以使用 JavaScript 对整数进行舍入吗?如果是,那么如何?

编辑:我希望它舍入到上面变量中看到的起始 3 位数字。就像如果有另一个变量叫做 c = 423841 它应该四舍五入成为 c = 424000.

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

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

解决方法是先算出需要舍入多少个数,然后在一个舍入中使用。

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

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

这应该有效:

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]