2010-05-18 7 views
3

Je voudrais trouver une fonction qui renvoie ce type de valeurs mises en forme:L'utilisation toFixed (2) et en mathématiques tour pour obtenir correct arrondi

1.5555 => 1.55 
1.5556 => 1.56 
1.5554 => 1.55 
1.5651 => 1.56 

toFixed() et en mathématiques revenir autour de cette valeur:

1.5651.fixedTo(2) => 1.57 

Ce sera utile pour arrondir l'argent.

+1

La quatrième décimale affecte-t-elle la deuxième décimale? Quand utiliseriez-vous cela? –

+5

Pourquoi voudriez-vous arrondir d'une manière si étrange? Comment cela serait-il utile pour arrondir l'argent? – sth

+1

Vos exemples ne semblent pas vraiment faire passer votre message. Quelle est la règle que vous essayez de faire respecter, exactement? Arrondir sur un chiffre "5" final, sauf si le chiffre suivant est> 5? –

Répondre

6

Comment cela?

function wacky_round(number, places) { 
    var multiplier = Math.pow(10, places+2); // get two extra digits 
    var fixed = Math.floor(number*multiplier); // convert to integer 
    fixed += 44; // round down on anything less than x.xxx56 
    fixed = Math.floor(fixed/100); // chop off last 2 digits 
    return fixed/Math.pow(10, places); 
} 

1,5554 => 1,55

1,5555 => 1,55

1,5556 => 1,56

1,5651 => 1,56

Ainsi, cela fonctionne, mais je pense que vous trouverez que ce n'est pas une façon généralement acceptée de faire le tour. http://en.wikipedia.org/wiki/Rounding#Tie-breaking

+0

ajusté non défini – mplungjan

+0

Désolé, copiez et collez l'erreur lors du formatage pour le site. Oh, et vous êtes clair sur pourquoi vous ne devriez pas utiliser cette méthode d'arrondi, non? –

+0

ce n'était pas pour ma consommation;) cependant celui [demandant] (http://stackoverflow.com/questions/5535394/round-off-decimal-using-javascript) voulait arrondir des montants de .181 à .18 et. 185 à .19 dont je ne suis jamais si sûr. toFixed (2) se sent mal dans ces cas. – mplungjan

2

et fonction standard

fixedTo = function (number, n) { 
    var k = Math.pow(10, n); 
    return (Math.round(number * k)/k); 
} 

puis appelez

fixedTo(1.5555, 2) // 1.56 
fixedTo(1.5555, 2) // 1.556 
fixedTo(0.615, 2) // 0.62 
+0

Cette solution ne fonctionne pas pour '1.005'. Je recommande d'utiliser [cette fonction à la place] (http://stackoverflow.com/a/23204425/573634) – Johannes

0

Vous pouvez utiliser la méthode Number.toFixed() native.

parseFloat(10.159.toFixed(2)) 

Ce qui précède renvoie 10,16. Number.toFixed() renvoie une chaîne, donc j'utilise parseFloat pour le convertir en nombre.