3

虽然我了解 JavaScript 中的 Math.round/ceil/floor 函数,但我一直无法为这个问题想出一个有效的函数。

我想要做的是将任何整数四舍五入为 3 的倍数,或者实际上是我选择的任何倍数。

给定'3'的倍数时,返回数字的要求如下:

0 returns 0
6 returns 6
7 returns 6
8 returns 9
22 returns 21
23 returns 24

等等……等等……所以基本上,返回的值总是给定参数的倍数,在这种情况下是'3'。

谢谢大家。

4

4 回答 4

7

您可以使用这样的简单函数:

function roundMultiple3(num) {
  return(Math.round(num / 3) * 3);
}

这除以 3,四舍五入到最接近的整数,然后再次乘以 3 以恢复完整值。

或允许您指定倍数的通用版本:

function roundMultiple(num, multiple) {
  return(Math.round(num / multiple) * multiple);
}
于 2012-05-23T22:51:04.407 回答
3

这应该可以正常工作:

function roundToNearest(number, multiple) {
    return Math.round(number * multiple) / multiple;
}

要四舍五入到小于该数字的最接近倍数,请替换Math.round()Math.floor()。同样,Math.ceil()将四舍五入到最接近的倍数。

于 2012-05-23T22:51:17.200 回答
3

这对我有用:

function roundTo(n, x) {
    return Math.round(x/n) * n;
}

roundTo(3, 2); // 3
rountTo(4, 7); // 8
于 2012-05-23T22:54:55.537 回答
0
Number.prototype.roundup=function(factor){
  var n=Math.ceil(this);
  while(n%factor)++n;
  return n;
}
于 2012-05-23T22:53:31.057 回答