2013-09-23 2 views
52

Ich brauche eine Dienstprogrammfunktion, die einen ganzzahligen Wert (im Bereich von 2 bis 5 Stellen in der Länge), der auf die mehrere von 5 anstelle der am nächsten Hier Vielfache von 5 ist, was ich habe:Javascript: Runden bis zum nächsten Vielfachen von 5

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

Als ich round5(32) laufen, ist es mir 30 gibt, wo ich 35.
will, wenn ich round5(37) laufen, es gibt mir 35, wo ich 40 will.

Als ich round5(132) laufen, es gibt mir 130, wo ich 135.
will, wenn ich round5(137) laufen, es gibt mir 135, wo ich 140

etc wollen ...

Wie kann ich tun Dies?

+3

Sollte 'round5 (5)' geben 5 oder 10? – user2357112

+1

Wie wäre es: teilen Sie x durch 5, runden Sie auf die nächste ganze Zahl auf (mit der Math.ceil-Funktion) und dann mit 5 multiplizieren? –

+2

round5 (5) sollte 5 geben –

Antwort

126

Dies wird die Arbeit tun:

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

Es ist nur eine Variation der gemeinsamen Rundungs ​​number auf nächste Vielfache von x Funktion Math.round(number/x)*x, aber unter Verwendung von .ceil statt .round/oben statt nach unten abrunden es immer macht nach mathematischen Regeln.

+0

Könntest du ein wenig darüber erzählen, wie du so schnell zu dieser Lösung gekommen bist? Ich dachte, dass Math.ceil nur Dezimalzahlen auf Ganzzahlen aufrundet. –

+1

@AmitErandole OK, ich werde meine Antwort bearbeiten, – pawel

+0

+1 für die Lesbarkeit – supertopi

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

vielleicht?

+0

ReferenceError: 'int' ist nicht definiert. Vielleicht wollten Sie 'parseInt', aber das wäre nicht notwendig, da' Math.floor' eine Zahl zurückgibt. – pawel

4

Gefällt mir das?

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 ; 

Grüße Paul

2

ich hier ankam, während für etwas ähnliches suchen. Wenn meine Zahl -0, -1, -2 ist, sollte sie auf -0, und wenn sie -3, -4, -5 ist, sollte sie auf -5 sinken.

ich kam mit dieser Lösung:

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

und die Tests:

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