2013-10-15 3 views
14

Ich bin für eine Leistung vonRunde Nummer zur nächsten 0,5 dezimal

4,658227848101266 suchen = 4,5

4,052117263843648 = 4,0

in der Nähe ich bekommen habe, ist

rating = (Math.round(rating * 4)/4).toFixed(1) 

aber mit dieser die Nummer 4.658227848101266 = 4.8 ???

Antwort

25

(Math.round (Bewertung * 2)/2) .toFixed (1)

-2

Ich nehme an, dass Sie die Nummer für die Ausgabe formatieren und die Genauigkeit nicht abschneiden möchten. Verwenden Sie in diesem Fall ein DecimalFormat. Zum Beispiel:

DecimalFormat df = new DecimalFormat("#.#"); 
df.format(rating); 
+0

Meine vorherige Antwort funktioniert natürlich nicht in JavaScript. Entschuldigung, wenn ich Verwirrung stifte. (Es funktioniert jedoch in Java.) – Thomas

19

Es ist ziemlich einfach, sollten Sie diese Zahl durch 2, dann um es multiplizieren und dann teilen sie durch 2:

var roundHalf = function(n) { 
    return (Math.round(n*2)/2).toFixed(1); 
}; 
10

Dies funktioniert für mich! (Mit Hilfe der nächstmöglichen Format zu Ihnen)

rating = (Math.round(rating * 2)/2).toFixed(1) 
3

Also diese Antwort hat mir geholfen. Hier ist ein bisschen Magie hinzugefügt, um das Runden auf .5 oder ganze Zahlen zu ermöglichen. Beachten Sie, dass die * 2 und/2 im Vergleich zu jeder anderen Antwort auf /.5 und * .5 umgeschaltet wird.

/* 
* @param {Number} n - pass in any number 
* @param {Number} scale - either pass in .5 or 1 
*/ 
var superCoolRound = function(n,scale) { 
    return (Math.round(n/scale) * scale).toFixed(1); 
}; 
+0

ordentlich .. ist das mehr peformant? – iamwhitebox