2009-04-28 9 views
3

Im Folgenden wird sicherstellen, dass alle großen Zahlen nur auf den Hundertstel (related to this answer) exakt ist:Wie bekomme ich Zahlen mit einer Genauigkeit von .05?

public function round(sc:Number):Number 
{ 
    sc = sc * 100; 
    sc = Math.floor(sc); 
    sc = sc/100; 

    return sc; 
} 

Was ist der optimale Weg, meine Zahlen der Genauigkeit von 0,05 abzurunden? Gibt es etwas schlaues mit Bit-Shifting zu tun, um dieses Ergebnis zu erhalten? Zum Beispiel würde Ich mag:

3,4566 = 3,45

3,04232 = 3,05

3,09 = 3,1

3,32 = 3,3

Antwort

6

Sie um 20 multiplizieren konnte, rund, dann teilen um 20.

Edit: Sie wollen Math.round() verwenden, statt Math.floor(), sonst wird Ihr Testfall 3.09 wird Verwandle dich in 3.05.

2

Sie könnten nur die * ändern 100 * 20 und/100/20. Aber warum dort aufhören, wenn Sie natürlich verallgemeinern können?

double floor(double in, double precision) { 
    return Math.floor(in/precision)*precision 
} 
//floor(1.07, 0.05) = 1.05 
+0

Dies sollte Math.round() sein, nicht Math.floor(). – Svante

+0

Sein Beispiel benutzte Boden, also benutzte ich Boden. Beachten Sie auch, dass ich die Funktion floor aufgerufen habe, um es deutlich zu machen. –

+0

Um konsistente Ergebnisse für negative Zahlen zu erhalten, sollten Sie auch 0.5 zum "in/precision" Ergebnis hinzufügen, das an Math.floor() übergeben wurde. – Alnitak

Verwandte Themen