2016-10-28 5 views
1

Ich versuche eine Zahl auf die nächste angegebene Dezimalstelle zu runden.Auf die nächste angegebene Zahl (dezimal) gerundet

Ich will es .11 auf die Dezimalstellen runden, .22, .33, .44, .55, .66, .77, .88, aber nicht .99. Stattdessen sollten .99 1.

Zum Beispiel sein:

1.14 -> 1.11 
56.75 ->56.77 
34.234 -> 34.22 
1.01 -> 1 (not 1.11) 

Das Problem ist nicht auf eine bestimmte Anzahl von Dezimalstellen gerundet, es auf die nächste von einem dieser Dezimalstellen Rundung.

Ich habe

versucht
(Math.round(parseFloat(number)*10)/9).toFixed(2); 

Und ich habe die Dezimalzahlen bekommen ich meistens gewünscht haben, mit Ausnahme der 1 Rundung auf 1,11 und 0,55 zum Beispiel wurde 0,56, die ich nicht will. Außerdem war es mehr als es sollte offensichtlich sein, weil ich mit 10 multipliziert und dann geteilt durch nur 9.

Antwort

4

Ich schlage vor, den ganzzahligen Teil zu trennen und den Bruchteil.

Wenn der Bruchteil an Faktor 9 nahe ist, dann wieder den ganzzahligen Teil plus eins, sonst den ganzzahligen Teil und den korrigierten Bruchteil.

function getRight(v) { 
 
    var i = Math.floor(v), 
 
     f = Math.round((v - i)/0.11);     
 
    return i + (f === 9 || f * 0.11); 
 
} 
 

 
console.log([1.14, 56.75, 34.234, 1.01].map(getRight));

Bei negativen Werten vorhanden sind:

function getRight(v) { 
 
    var i = Math[v < 0 ? 'ceil' : 'floor'](v), 
 
     f = Math.round((v - i)/0.11);     
 
    return i + (f === 9 || f * 0.11); 
 
} 
 

 
console.log([1.14, 56.75, 34.234, 1.01].map(getRight)); 
 
console.log([-1.14, -56.75, -34.234, -1.01].map(getRight));

Verwandte Themen