2013-09-23 15 views
52

Potrzebuję funkcji użyteczności, która pobiera wartość całkowitą (o długości od 2 do 5 cyfr), która zaokrągla do liczby następnej wielokrotności 5 zamiast od najbliżej wielokrotność 5. Oto co mam:JavaScript: Zaokrąglanie do następnej wielokrotności 5

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

Kiedy biegnę round5(32), to daje mi 30, gdzie chcę 35.
Kiedy biegnę round5(37), to daje mi 35, gdzie chcę 40.

Kiedy biegnę round5(132), to daje mi 130, gdzie chcę 135.
Kiedy biegnę round5(137), to daje mi 135, gdzie chcę 140.

etc ...

Jak mam zrobić to?

+3

Gdyby 'round5 (5)' dać 5 lub 10? – user2357112

+1

Co powiesz na: podzielić x przez 5, zaokrąglić w górę do najbliższej liczby całkowitej (używając funkcji Math.ceil), a następnie pomnożyć przez 5? –

+2

round5 (5) powinien dać 5 –

Odpowiedz

126

to zrobi pracę:

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

To jest po prostu odmianą wspólnym zaokrąglenia number do najbliższej wielokrotności x funkcji Math.round(number/x)*x, ale przy użyciu .ceil zamiast .round sprawia, że ​​zawsze zaokrąglić w górę, zamiast w dół/w górę zgodnie z zasadami matematycznymi.

+0

czy możesz wyjaśnić trochę, jak doszedłeś do tego rozwiązania tak szybko? Myślałem, że Math.ceil tylko zaokrągla dziesiętne do całych liczb całkowitych. –

+1

@AmitErandole OK, będę edytować odpowiedź, – pawel

+0

+1 dla czytelności – supertopi

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

może?

+0

ReferenceError: 'int' nie jest zdefiniowany. Może chciałeś 'parseInt', ale nie byłoby to konieczne, ponieważ' Math.floor' zwraca liczbę. – pawel

4

Podoba Ci się to?

function roundup5(x) { return (x%5)?x-x%5+5:x } 
1
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 ; 

Pozdrowienia Paul

2

Przyjechałem tutaj w poszukiwaniu czegoś podobnego. Jeśli mój numer to -0, -1, -2, powinien on wynosić -0, a jeśli wynosi -3, -4, -5 powinien mieć wartość -5.

wymyśliłem tego rozwiązania:

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

a testy:

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 
Powiązane problemy