Javascript: 四舍五入到下一个5的倍数

我需要一个实用函数,采取一个整数值(范围从2到5位数的长度) ,四舍五入到5的 下一个倍,而不是 最近的倍的5。以下是我得到的信息:

function round5(x)
{
return (x % 5) >= 2.5 ? parseInt(x / 5) * 5 + 5 : parseInt(x / 5) * 5;
}

当我运行 round5(32)时,它给我 30,我想要35。
当我运行 round5(37)时,它给我 35,我想要40。

当我运行 round5(132)时,它给我 130,我想要135。
当我运行 round5(137)时,它给我 135,我想要140。

等等。

我该怎么做?

113963 次浏览
if( x % 5 == 0 ) {
return int( Math.floor( x / 5 ) ) * 5;
} else {
return ( int( Math.floor( x / 5 ) ) * 5 ) + 5;
}

也许?

这将起到作用:

function round5(x)
{
return Math.ceil(x/5)*5;
}

这只是 number的一个变化,它与 x函数 Math.round(number/x)*x的最接近的倍数取整,但是根据数学规则,使用 .ceil而不是 .round使它总是向上取整而不是向下/向上取整。

像这样吗?

function roundup5(x) { return (x%5)?x-x%5+5:x }
voici 2 solutions possibles :
y= (x % 10==0) ? x : x-x%5 +5; //......... 15 => 20 ; 37 => 40 ;  41 => 45 ; 20 => 20 ;


z= (x % 5==0) ? x : x-x%5 +5;  //......... 15 => 15 ; 37 => 40 ;  41 => 45 ; 20 => 20 ;

问候 保罗

我来这里是为了寻找类似的东西。 如果我的数字是ー0,ー1,ー2,它应该降到ー0,如果是ー3,ー4,ー5,它应该升到ー5。

我想到了这个办法:

function round(x) { return x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5 }

还有测试:

for (var x=40; x<51; x++) {
console.log(x+"=>", x%5<3 ? (x%5===0 ? x : Math.floor(x/5)*5) : Math.ceil(x/5)*5)
}
// 40 => 40
// 41 => 40
// 42 => 40
// 43 => 45
// 44 => 45
// 45 => 45
// 46 => 45
// 47 => 45
// 48 => 50
// 49 => 50
// 50 => 50

//精确地回旋

var round = function (value, precision) {
return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
};

//精确到5

var round5 = (value, precision) => {
return round(value * 2, precision) / 2;
}
const fn = _num =>{
return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

使用 round 的原因是预期的输入可以是一个随机数。

谢谢! ! !

const roundToNearest5 = x => Math.round(x/5)*5

这将把数字四舍五入到最接近的5。若要总是四舍五入到最接近的5,请使用 Math.ceil。同样,要总是四舍五入,请使用 Math.floor而不是 Math.round。 然后可以像调用其他函数一样调用这个函数,

roundToNearest5(21)

将返回:

20

旧问题的新答案,没有 if也没有 Math

x % 5: the remainder
5 - x % 5: the amount need to add up
(5 - x % 5) % 5: make sure it less than 5
x + (5 - x % 5) % 5: the result (x or next multiple of 5)


~~((x + N - 1) / N): equivalent to Math.ceil(x / N)

function round5(x) {
return x + (5 - x % 5) % 5;
}


function nearest_multiple_of(N, x) {
return x + (N - x % N) % N;
}


function other_way_nearest_multiple_of(N, x) {
return ~~((x + N - 1) / N) * N;
}




console.info(nearest_multiple_of(5,    0)); // 0
console.info(nearest_multiple_of(5, 2022)); // 2025
console.info(nearest_multiple_of(5, 2025)); // 2025


console.info(other_way_nearest_multiple_of(5, 2022)); // 2025
console.info(other_way_nearest_multiple_of(5, 2025)); // 2025

我用 while 循环或者其他循环解决了这个问题。重要的是增加数字,比如 n,直到 n % 5 == 0;

while(n % 5 != 0) {
n++;
}
return n;