Javascript: mise en forme d'un nombre arrondi à N décimales
en JavaScript, la méthode classique pour arrondir un nombre à N décimales est quelque chose comme:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
JS:
function roundNumber(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
console.log(roundNumber(0.1 + 0.2, 2));
console.log(roundNumber(2.1234, 2));
Toutefois, cette approche va arrondir à une maximum de N décimales alors que je veux toujours tour à N décimales. Par exemple "2.0" sera arrondi à "2".
Des idées?
- normalement, vous pouvez utiliser
toFixed()
( developer.mozilla.org/En/Core_JavaScript_1.5_Reference/... ), mais il est buggé dans IE: stackoverflow.com/questions/661562/... ; vous devrez écrire votre propre version... - changer peut-être accepté de répondre - David réponse est bonne pour IE8+, alors que l'on a accepté de répondre a certains bogues sérieux sur tous les navigateurs.
- Êtes-vous sérieux?
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas un arrondissement ploblem, c'est un problème d'affichage. Un certain nombre ne contient pas d'informations sur les chiffres significatifs; la valeur 2 est le même que 2.0000000000000. C'est lorsque vous mettez l'arrondi de la valeur dans une chaîne de caractères que vous avez faire afficher un certain nombre de chiffres.
Vous pouvez simplement ajouter des zéros après le nombre, quelque chose comme:
(Notez que cela suppose que les paramètres régionaux du client période d'utilisations comme séparateur décimal, le code doit travailler un peu plus pour fonction d'autres paramètres.)
.toFixed(dec)
?toFixed()
à pavé de décimales à la fin, après arrondi?1.02449999998.toFixed(4)
renvoie correctement1.0245
.Number(float).toFxied(places);
..toFixed()
est fixé dans IE8+ (mon test), mais apparemment buggy dans IE7 (comme par @Guffa lien dans le commentaire ci-dessus - merci). Donc utilisation toFixed (), sauf si vous avez besoin de soutien IE7 😉(0.595).toFixed(2)
et a obtenu la réponse exacte de0.60
. Votre code est cassé pour les cas de coin (peu j'ai pensé à partir du haut de ma tête avec quelques minutes de test, je pourrais probablement trouver d'autres choses de mal avec elle), et n'est pas adapté pour la production de code à mon humble avis.toFixed
est cassé, par exemple(1000000000000000000000).toFixed(3)
retourne1e+21
pas1000000000000000000000.000
.Je pense qu'il y a une approche plus simple de toutes les données ici, et c'est la méthode
Number.toFixed()
déjà implémenté en JavaScript.simplement écrire:
etc...
toFixed()
retourne une chaîne de caractères.J'ai trouvé un moyen. C'est Christoph code corrigé:
Lire les détails de la répétition d'un caractère à l'aide d'un constructeur tableau ici si vous êtes curieux de savoir pourquoi j'ai ajouté le "+ 1".
Il y a toujours une meilleure façon de faire les choses.
Je voudrais obtenir quatre chiffres de précision: 51.94
viens de faire:
le résultat sera: 51.94
De PHP et la Méthode d'arrondi
Le code ci-dessous peut être utilisé pour ajouter votre propre version de Mathématiques.un tour autour de votre propre espace de noms qui prend un paramètre de précision. Contrairement à Décimal arrondi dans l'exemple ci-dessus, ce n'effectue aucune conversion vers et à partir de chaînes de caractères, et la précision du paramètre fonctionne même manière que le PHP et Excel en vertu de laquelle un montant positif de 1 sera arrondi à 1 chiffre après la virgule et -1 à tour les dizaines.
de Mozilla Developer de référence pour les Mathématiques.tour (la)
Espérons-le code du travail (n'a pas à faire beaucoup d'essais):
Voici un lien vers un script Javascript sprintf,
http://www.webtoolkit.info/javascript-sprintf.html
Un appel à sprintf() est une méthode d'arrondissement en perl, mais
javascript n'a pas cette fonction en natif.
http://perldoc.perl.org/functions/sprintf.html
T-il m'aider?
Je pense que en dessous de fonction peut aider à
utilisation :
roundOff(600.23458,2);
sera de retour600.23
Cela fonctionne pour l'arrondi à N chiffres (si vous voulez juste pour tronquer à N chiffres supprimer les Mathématiques.tour d'appels et d'utiliser les Mathématiques.trunc un):
Eu recours à une telle logique, à Java, dans le passé, quand j'étais création manipulation de données E-Ardoise composants. C'est depuis que j'ai trouvé que l'ajout de 0,1 à de nombreuses reprises pour 0 vous finirais avec certains de façon inattendue long de la partie décimale (c'est en raison de l'arithmétique à virgule flottante).
Un utilisateur commentaire à Format de nombre à toujours montrer à 2 décimales appelle cette technique de mise à l'échelle.
De le mentionner, il ya des cas qui ne sont pas ronds comme prévu et à la http://www.jacklmoore.com/notes/rounding-in-javascript/ il est suggéré à la place:
Si vous n'avez pas vraiment se soucier de l'arrondissement, juste ajouté un toFixed(x), puis la suppression de fuite 0es et le point si nécessaire. Ce n'est pas une solution rapide.
format(1.2, 5)
et a obtenu1.2
, alors que je m'attendais à1.20000
.