it-swarm.com.de

Javascript: Runden Sie das nächste Vielfache von 5 auf

Ich brauche eine Utility-Funktion, die einen ganzzahligen Wert (im Bereich von 2 bis 5 Ziffern) aufnimmt, der auf das next - Vielfache von 5 statt auf das next - Vielfache von 5 aufrundet. Hier ist was ich habe:

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

Wenn ich round5(32) starte, bekomme ich 30, wo ich will 35.
Wenn ich round5(37) starte, bekomme ich 35, wo ich 40 möchte. 

Wenn ich round5(132) starte, bekomme ich 130, wo ich 135 will.
Wenn ich round5(137) starte, bekomme ich 135, wo ich 140 möchte. 

usw...

Wie mache ich das?

73
Amit Erandole

Dies wird die Arbeit erledigen:

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

Es ist nur eine Variation der üblichen Rundung number zum nächsten Vielfachen von x function Math.round(number/x)*x, aber bei Verwendung von .ceil anstelle von .round wird immer nach mathematischen Regeln aufgerundet statt nach unten/oben.

188
pawel

So was?

function roundup5(x) { return (x%5)?x-x%5+5:x }

Ich bin hier angekommen, als ich nach etwas Ähnlichem suchte ... Wenn meine Nummer -0, -1, -2 ist, sollte sie auf -0 gehen, und wenn -3, -4, -5, sollte es -5 sein.

Ich habe diese Lösung gefunden:

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
4
AymKdn
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
Paul Neulat
const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

grund für die Verwendung von round ist, dass die erwartete Eingabe eine Zufallszahl sein kann.

Vielen Dank!!!

0
Parit

// mit Präzision rund

var round = function (value, precision) {
    return Math.round(value * Math.pow(10, precision)) / Math.pow(10, precision);
};

// auf 5 genau runden

var round5 = (value, precision) => {
    return round(value * 2, precision) / 2;
}
0
Dennis T