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

Lesezeit: 3 Minuten

Benutzer-Avatar
Amit Erandole

Ich brauche eine Hilfsfunktion, die einen ganzzahligen Wert (mit einer Länge von 2 bis 5 Ziffern) aufnimmt, der auf rundet nächste Vielfaches von 5 statt der nächste Vielfaches von 5. Hier ist, was ich habe:

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

Wenn ich laufe round5(32)es gibt mir 30wo ich 35 will.
Wenn ich laufe round5(37)es gibt mir 35wo ich 40 will.

Wenn ich laufe round5(132)es gibt mir 130wo ich 135 will.
Wenn ich laufe round5(137)es gibt mir 135wo ich 140 will.

etc…

Wie mache ich das?

  • Sollte round5(5) gib 5 oder 10?

    – Benutzer2357112

    23. September 2013 um 6:59 Uhr

  • Wie wäre es mit: Teilen Sie x durch 5, runden Sie auf die nächste Ganzzahl auf (unter Verwendung der Funktion Math.ceil) und multiplizieren Sie dann mit 5?

    – Martin Wilson

    23. September 2013 um 7:02 Uhr


  • Runde 5(5) sollte 5 ergeben

    – Amit Erandole

    23. September 2013 um 7:02 Uhr

Benutzer-Avatar
Pawel

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 Funktion Math.round(number/x)*xaber mit .ceil Anstatt von .round macht es nach mathematischen Regeln immer aufrunden statt ab/auf.

  • Können Sie kurz erklären, wie Sie so schnell zu dieser Lösung gekommen sind? Ich dachte, Math.ceil rundet nur Dezimalzahlen auf ganze Zahlen auf.

    – Amit Erandole

    23. September 2013 um 7:07 Uhr


  • Nun, hier wird auf die ganze ganze Zahl aufgerundet, @AmitErandole 😉

    – Michael Krelin – Hacker

    23. September 2013 um 7:12 Uhr

  • +1 für kompakt und effizient … und es wird auf 10 gerundet, richtig? 🙂

    – zx81

    9. Juni 2014 um 10:19 Uhr

  • Ich würde dieser Funktion einen weiteren Parameter hinzufügen, der den “Runder” angibt, damit die ursprüngliche Zahl auf das gerundet werden kann, was wir im Funktionsaufruf festgelegt haben, und nicht nur auf 5 festgelegt …

    – TheCubeMan

    22. Oktober 2014 um 11:27 Uhr

  • Ich liebe diese Lösung! Ich habe es mit einer Closure implementiert, um das Multiple Inline nach Bedarf bequem zu ändern: const roundToNearestMultipleOf = m => n => Math.round(n/m)*m Verwendungszweck: roundToNearestMultipleOf(5)(32)

    – Gfullam

    21. Februar 2019 um 19:25 Uhr


const roundToNearest5 = x => Math.round(x/5)*5

Dadurch wird die Zahl auf die nächste 5 gerundet. Um immer auf die nächste 5 aufzurunden, verwenden Sie Math.ceil. Ebenso verwenden Sie, um immer abzurunden Math.floor Anstatt von Math.round. Sie können diese Funktion dann wie jede andere aufrufen. Zum Beispiel,

roundToNearest5(21)

wird zurückkehren:

20

  • +1, weil ich einen Weg brauchte, um auf das zu runden nächste fünf. (OP bat um Rundung auf die nächste fünf (nach oben). Daher ist die akzeptierte Antwort tatsächlich richtig, @Oliver.)

    – AlexG

    21. Januar 2021 um 12:36 Uhr


So was?

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

  • Vielen Dank für Ihre Lösung, meine einzigartige Situation benötigte eine Aufrundung, die keine Gleitkomma-Mathematik verwendete, aber Modulo verwenden konnte.

    – DoomGoober

    7. Juni 2021 um 19:39 Uhr

Ich bin hierher gekommen, als ich nach etwas Ähnlichem gesucht habe. Wenn meine Zahl —0, —1, —2 ist, sollte sie auf —0 absteigen, und wenn sie —3, —4, —5 ist, sollte sie auf —5 absteigen.

Ich bin auf diese Lösung gekommen:

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

Und die Prüfungen:

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

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

Benutzer-Avatar
Dennis T

// mit Präzision runden

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

// mit Präzision auf 5 runden

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

Benutzer-Avatar
Teil

const fn = _num =>{
    return Math.round(_num)+ (5 -(Math.round(_num)%5))
}

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

Vielen Dank!!!

1018360cookie-checkJavascript: Runden Sie auf das nächste Vielfache von 5 auf

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy