160

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

ETC...

我该怎么做呢?

4

10 回答 10

369

这将完成工作:

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

它只是常见的舍入到最接近的函数number倍数的变体,但是根据数学规则,使用而不是使其始终向上舍入而不是向下/向上。xMath.round(number/x)*x.ceil.round

于 2013-09-23T07:03:06.513 回答
30
const roundToNearest5 = x => Math.round(x/5)*5

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

roundToNearest5(21)

将返回:

20
于 2019-09-28T14:54:48.900 回答
6

像这样?

function roundup5(x) { return (x%5)?x-x%5+5:x }
于 2013-09-23T07:05:20.353 回答
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
于 2017-09-21T08:34:20.423 回答
3
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 ;

问候保罗

于 2016-03-16T09:27:54.250 回答
0
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

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

谢谢!!!

于 2018-10-16T10:14:39.000 回答
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;
}
于 2018-07-11T11:43:02.123 回答
0

旧问题的新答案,没有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

于 2022-02-12T04:58:03.110 回答
-1
function gradingStudents(grades) {
    // Write your code here
    const roundedGrades = grades.map(grade => {
       if(grade >= 38 && grade %5 >=3){
            while(grade % 5 != 0){
                grade++
            }
        }
        return grade
    }) 
    return roundedGrades
}
于 2021-11-18T17:46:03.990 回答
-2
if( x % 5 == 0 ) {
    return int( Math.floor( x / 5 ) ) * 5;
} else {
    return ( int( Math.floor( x / 5 ) ) * 5 ) + 5;
}

也许?

于 2013-09-23T07:03:04.480 回答