2009-04-28 7 views
3

qui suit veillera à ce que tout grand nombre ne seront précis au lieu de centièmes (related to this answer):comment obtenir des nombres pour avoir une précision de .05?

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

    return sc; 
} 

Quelle est la meilleure façon d'arrondir mes chiffres à la précision de .05? Y a-t-il quelque chose d'intelligent à faire avec le décalage pour obtenir ce résultat? Par exemple, je voudrais:

3,4566 = 3,45

3,04232 = 3,05

3,09 = 3,1

3,32 = 3,3

Répondre

6

Vous pouvez multiplier par 20, rond, puis diviser par 20.

Edit: Vous voulez utiliser Math.round() au lieu de Math.floor(), sinon votre cas de test 3,09 sera transformer en 3.05.

2

Vous pouvez simplement changer le * 100 à * 20 et/100/20. Mais pourquoi s'arrêter là, quand vous pouvez généraliser naturellement?

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

Cela devrait être Math.round(), pas Math.floor(). – Svante

+0

Son exemple utilisé étage, alors j'ai utilisé le plancher. Notez également que j'ai appelé le plancher de fonction pour le rendre clair. –

+0

Pour obtenir des résultats cohérents pour les nombres négatifs, vous devez également ajouter 0.5 au résultat "in/precision" transmis à Math.floor() – Alnitak

Questions connexes