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


113

我需要一个实用函数,该函数接受一个整数值(长度在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。

等等...

我该怎么做呢?


3
应该round5(5)给5还是10?
user2357112在2013年

1
怎么样:将x除以5,四舍五入到最接近的整数(使用Math.ceil函数),然后乘以5?
马丁·威尔逊

2
round5(5)应该给5
Amit Erandole

Answers:


271

这将完成工作:

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

它只是通用舍入numberx函数的最接近倍数的一种变体Math.round(number/x)*x,但是使用.ceil代替代替.round总是根据数学规则向上舍入而不是向下/向上舍入。


您能否解释一下您如何如此快速地提出此解决方案?我以为Math.ceil只将小数舍入为整数。
阿米特·埃兰多

2
好吧,它的确舍入为整数,@ AmitErandole;)
Michael Krelin-黑客2013年

1
+1紧凑而高效...它将舍入到10,对吗?:)
zx81 2014年

我会在此函数中添加另一个参数,表示“取整”,因此原始数字可以四舍五入到我们在函数调用中设置的值,而不仅是固定的5 ...
TheCuBeMan 2014年

3
我喜欢这个解决方案!我用一个闭包实现了它,以便根据需要方便地更改多个内联:const roundToNearestMultipleOf = m => n => Math.round(n/m)*m用法:roundToNearestMultipleOf(5)(32)
gfullam

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

这会将数字四舍五入到最接近的5。要始终将其四舍五入到5,请使用Math.ceil。同样,要始终四舍五入,请使用Math.floor代替Math.round。然后,您可以像调用其他函数一样调用此函数。例如,

roundToNearest5(21)

将返回:

20

公认的答案实际上是错误的。这是正确的方法。也可使用小数,例如2.5
Oliver Dixon


5

我是在寻找类似物品时到达这里的。如果我的数字是-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

1
通过使用Math.round
Spencer Stolworthy

2
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

//精确舍入

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

0
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

使用回合的原因是预期输入可以是随机数。

谢谢!!!


-2
if( x % 5 == 0 ) {
    return int( Math.floor( x / 5 ) ) * 5;
} else {
    return ( int( Math.floor( x / 5 ) ) * 5 ) + 5;
}

也许?


ReferenceError:int未定义。也许您想要parseInt,但这不是必需的,因为Math.floor返回了一个数字。
pawel 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.