자바 스크립트 : 다음 5의 배수로 올림


113

가장 가까운 5의 배수 대신 5 의 다음 배수로 반올림하는 정수 값 (길이 2에서 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 모니카 지원

1
x를 5로 나누고 (Math.ceil 함수를 사용하여) 가장 가까운 정수로 반올림 한 다음 5를 곱하는 방법은 어떻습니까?
Martin Wilson

2
round5 (5) 5 주어야한다
아 미트 Erandole에게

답변:


271

이것은 작업을 수행합니다.

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

이것은 함수의 number가장 가까운 배수 에 대한 일반적인 반올림의 변형 일 뿐이지 만, 대신 사용 하면 수학적 규칙에 따라 항상 아래 / 위 대신 반올림됩니다.xMath.round(number/x)*x.ceil.round


어떻게 이렇게 빨리이 솔루션을 찾았는지 설명해 주시겠습니까? Math.ceil은 소수를 정수로만 반올림한다고 생각했습니다.
아 미트 Erandole

2
음, @AmitErandole, 여기에 전체 정수로 라운드 업을한다)
마이클 Krelin - 해커

1
콤팩트하고 효율적인 경우 +1 ... 10으로 반올림됩니다. :)
zx81 2014-06-09

원래의 수는 우리가 함수 호출에 설정된 어떤 반올림 만 5 고정되지 수 있도록 나는 ...은 "라운드"를 나타내는,이 함수에 다른 매개 변수를 추가 할 것
TheCuBeMan

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처럼 소수와 함께 작동
올리버 딕슨


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

round를 사용하는 이유는 예상 입력이 난수 일 수 있기 때문입니다.

감사!!!


-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입니다.
파블
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.