Peut-on arrondir un nombre en javascript à 1 caractère après la virgule (correctement arrondi) ?
J'ai essayé le *10, l'arrondi, le /10 mais cela laisse deux décimales à la fin de l'int.
Peut-on arrondir un nombre en javascript à 1 caractère après la virgule (correctement arrondi) ?
J'ai essayé le *10, l'arrondi, le /10 mais cela laisse deux décimales à la fin de l'int.
Math.round( num * 10) / 10
fonctionne, voici un exemple...
var number = 12.3456789;
var rounded = Math.round( number * 10 ) / 10;
// rounded is 12.3
si vous voulez qu'il y ait une décimale, même si c'est un 0, alors ajoutez...
var fixed = rounded.toFixed(1);
// fixed is always to 1dp
// BUT: returns string!
// to get it back to number format
parseFloat( number.toFixed(2) )
// 12.34
// but that will not retain any trailing zeros
// so, just make sure it is the last step before output,
// and use a number format during calculations!
Faites attention en utilisant .toFixed()
car il renvoie une chaîne de caractères alors que vous voulez peut-être un nombre.
Cool, évidemment en utilisant parseFloat
supprimera les décimales laissées par .toFixed()
si c'est un nombre entier (zéros). En général, si vous voulez faire des calculs, il est préférable de suivre le premier exemple. Si vous souhaitez afficher un nombre dans votre interface utilisateur, utilisez la commande .toFixed()
.
Hmmm... c'est logique, n'importe quelle façon de convertir en nombre doit toujours enlever les zéros erronés, c'est pourquoi cela doit rester une chaîne. Je suppose que cela devrait toujours être la dernière étape avant l'affichage, et ne pas être utilisé dans les calculs.
Parfois toFixed()
a des pépins - je l'ai vu dans un navigateur Chrome où j'appelle toFixed()
puis convertir en une chaîne de caractères, et il montre quelque chose comme 10.00000000068
- bizarre. Mais je ne peux pas le reproduire de manière fiable.
Oui, j'ai rencontré des problèmes avec toFixed() même avec quelques décimales. Il arrondissait la fraction 4 à la valeur supérieure au lieu de la valeur inférieure, si je me souviens bien.
Si vous utilisez Math.round
alors vous reviendrez 5
en cas de 5.01
et non 5.0
.
Si vous utilisez toFixed
vous rencontrez arrondir questions .
Si vous voulez le meilleur des deux mondes, combinez les deux :
(Math.round(5.01 * 10) / 10).toFixed(1)
Vous pourriez vouloir créer une fonction pour cela :
function roundedToFixed(_float, _digits){
var rounder = Math.pow(10, _digits);
return (Math.round(_float * rounder) / rounder).toFixed(_digits);
}
Je vote pour toFixed()
mais, pour mémoire, voici une autre méthode qui utilise le décalage de bits pour convertir le nombre en un int. Ainsi, il arrondit toujours vers zéro (vers le bas pour les nombres positifs, vers le haut pour les négatifs).
var rounded = ((num * 10) << 0) * 0.1;
Mais bon, comme il n'y a pas d'appels de fonction, c'est super rapide :)
Et en voici un qui utilise la correspondance des chaînes de caractères :
var rounded = (num + '').replace(/(^.*?\d+)(\.\d)?.*/, '$1$2');
Je ne recommande pas l'utilisation de la variante string, je dis ça comme ça.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
17 votes
Math.round(n * 10) / 10
fonctionne. Quel est votre code ?0 votes
FYI developer.mozilla.org/fr/JavaScript/Référence/Global_Objects/