J'ai cette ligne de code qui arrondit mes nombres à deux décimales. Mais je reçois des nombres comme celui-ci: 10,8, 2,4, etc. Ce n'est pas mon idée de deux décimales, alors comment améliorer les éléments suivants?
Math.round(price*Math.pow(10,2))/Math.pow(10,2);
Je veux des nombres comme 10.80, 2.40, etc. L'utilisation de jQuery me convient.
0.565
,0.575
,1.005
), puis - je suggérer à la recherche de nouveau à cette réponse , ce qui les obtient corriger?number.toFixed(x)
méthode pour la convertir en une chaîne avec le nombre de zéros requis. Par exemple, arrondissez1.34
à1.3
avec la méthode multi-navigateur, puis ajoutez 1 zéro et convertissez-le en chaîne avec1.3.toFixed(2)
(pour obtenir"1.30"
).Réponses:
Pour formater un nombre à l'aide de la notation à virgule fixe, vous pouvez simplement utiliser la méthode toFixed :
Notez que
toFixed()
renvoie une chaîne.IMPORTANT : notez que toFixed n'arrondit pas 90% du temps, il renverra la valeur arrondie, mais dans de nombreux cas, cela ne fonctionne pas.
Par exemple:
2.005.toFixed(2) === "2.00"
MISE À JOUR:
De nos jours, vous pouvez utiliser le
Intl.NumberFormat
constructeur. Cela fait partie de la spécification ECMAScript Internationalization API (ECMA402). Il a très bon soutien du navigateur , y compris même IE11, et il est entièrement pris en charge Node.js .Vous pouvez également utiliser la
toLocaleString
méthode, qui en interne utilisera l'Intl
API:Cette API vous offre également une grande variété d'options de formatage, comme des milliers de séparateurs, des symboles monétaires, etc.
la source
(0.09).toFixed(1);
donne 0,0 dans IE8Math.Round(0.09)
reviendra0
donc cela donnera toujours0.0
...Math.round(value*100)/100
fonctionne mieux pour 2DP.Il s'agit d'un sujet ancien, mais toujours parmi les meilleurs résultats de Google et les solutions proposées partagent le même problème de décimales à virgule flottante. Voici la fonction (très générique) que j'utilise, grâce à MDN :
Comme nous pouvons le voir, nous n'obtenons pas ces problèmes:
Cette généricité fournit également des trucs sympas:
Maintenant, pour répondre à la question du PO, il faut taper:
Ou, pour une fonction plus concise et moins générique:
Vous pouvez l'appeler avec:
Divers exemples et tests (merci à @ tj-crowder !):
Afficher l'extrait de code
la source
J'ajoute généralement cela à ma bibliothèque personnelle, et après quelques suggestions et en utilisant également la solution @TIMINeutron, et en la rendant adaptable à la longueur décimale, celle-ci convient le mieux:
fonctionnera pour les exceptions signalées.
la source
Je ne sais pas pourquoi je ne peux pas ajouter de commentaire à une réponse précédente (peut-être que je suis désespérément aveugle, ne sais pas), mais j'ai trouvé une solution en utilisant la réponse de @ Miguel:
Et ses deux commentaires (de @bighostkim et @Imre):
precise_round(1.275,2)
non retour 1.28precise_round(6,2)
ne pas retourner 6h00 (comme il le voulait).Ma solution finale est la suivante:
Comme vous pouvez le voir, j'ai dû ajouter un peu de "correction" (ce n'est pas ce que c'est, mais puisque Math.round est avec perte - vous pouvez le vérifier sur jsfiddle.net - c'est la seule façon dont j'ai su "corriger" " il). Il ajoute 0,001 au nombre déjà complété, il ajoute donc
1
trois0
s à droite de la valeur décimale. Il devrait donc être sûr à utiliser.Après cela, j'ai ajouté
.toFixed(decimal)
pour toujours afficher le nombre au format correct (avec la bonne quantité de décimales).C'est à peu près tout. Utilisez-le bien;)
EDIT: ajout de fonctionnalités à la "correction" des nombres négatifs.
la source
precise_round(1.27499,2)
retourne maintenant 1,28 ... Ce n'est pasMath.round
qui est lossy; la façon dont les ordinateurs stockent en interne les valeurs à virgule flottante. Fondamentalement, vous êtes voué à l'échec avec certaines valeurs avant même que les données n'atteignent votre fonction :)Une façon d'être sûr à 100% que vous obtenez un nombre avec 2 décimales:
Si cela provoque des erreurs d'arrondi, vous pouvez utiliser ce qui suit comme James l'a expliqué dans son commentaire:
la source
var answer = (Math.round((num * 1000)/10)/100).toFixed(2);
Utilisez cette méthode ci-dessous
ET si vous voulez que le numéro soit fixe, utilisez
la source
Je n'ai pas trouvé de solution précise à ce problème, j'ai donc créé la mienne:
Exemples:
la source
@heridev et moi avons créé une petite fonction dans jQuery.
Vous pouvez essayer ensuite:
HTML
jQuery
DÉMO EN LIGNE:
http://jsfiddle.net/c4Wqn/
la source
input
événement. Cela ne crée pas d'effet de scintillement et se déclenche également lorsque vous accédez au terrain avec JSLe problème avec les valeurs à virgule flottante est qu'elles essaient de représenter une quantité infinie de valeurs (continues) avec une quantité fixe de bits. Donc, naturellement, il doit y avoir une perte de jeu et vous allez être mordu avec certaines valeurs.
Lorsqu'un ordinateur stocke 1.275 en tant que valeur à virgule flottante, il ne se souvient pas réellement s'il s'agissait de 1.275 ou 1.27499999999999993, ou même 1.27500000000000002. Ces valeurs devraient donner des résultats différents après avoir arrondi à deux décimales, mais elles ne le seront pas, car pour l'ordinateur, elles ont exactement la même apparence après avoir été stockées sous forme de valeurs à virgule flottante, et il n'y a aucun moyen de restaurer les données perdues. Tout calcul supplémentaire ne fera qu'accumuler une telle imprécision.
Donc, si la précision est importante, vous devez éviter les valeurs à virgule flottante dès le départ. Les options les plus simples consistent à
Par exemple, lorsque vous utilisez des entiers pour stocker le nombre de centièmes, la fonction de recherche de la valeur réelle est assez simple:
Avec les chaînes, vous aurez besoin d'arrondir, mais c'est toujours gérable:
Notez que cette fonction arrondit au plus proche, les liens loin de zéro , tandis que IEEE 754 recommande d'arrondir au plus proche, les liens à même comme comportement par défaut pour les opérations en virgule flottante. De telles modifications sont laissées en exercice au lecteur :)
la source
En voici un simple
Utilisez comme
alert(roundFloat(1.79209243929,4));
Jsfiddle
la source
Arrondissez votre valeur décimale, puis utilisez
toFixed(x)
pour vos chiffres attendus.Appel
parseDecimalRoundAndFixed (10.800243929,4) => 10.80 parseDecimalRoundAndFixed (10.807243929,2) => 10.81
la source
Arrondir vers le bas
Rassembler
Arrondi le plus proche
la source
la source
Voici ma solution 1 ligne:
Number((yourNumericValueHere).toFixed(2));
Voici ce qui se passe:
1) Tout d'abord, vous appliquez
.toFixed(2)
sur le nombre dont vous souhaitez arrondir les décimales. Notez que cela convertira la valeur en une chaîne de nombre. Donc, si vous utilisez Typescript, cela générera une erreur comme celle-ci:"Le type 'chaîne' n'est pas attribuable au type 'nombre'"
2) Pour récupérer la valeur numérique ou pour convertir la chaîne en valeur numérique, appliquez simplement la
Number()
fonction à cette valeur dite de "chaîne".Pour des éclaircissements, regardez l'exemple ci-dessous:
EXEMPLE: J'ai un montant qui a jusqu'à 5 chiffres dans les décimales et je voudrais le raccourcir jusqu'à 2 décimales. Je le fais comme ça:
la source
Mettez les éléments suivants dans une portée globale:
et puis essayer :
Mise à jour
Notez que
toFixed()
cela ne peut fonctionner que pour le nombre de décimales entre0-20
iea.getDecimals(25)
peut générer une erreur javascript, donc pour accommoder que vous pouvez ajouter une vérification supplémentaire iela source
cela renverra un nombre aléatoire de 1 à 100 arrondi à 2 décimales.
la source
Cela a fonctionné pour moi: arrondir les décimales en JavaScript
la source
Utilisation de cette réponse par référence: https://stackoverflow.com/a/21029698/454827
Je construis une fonction pour obtenir des nombres dynamiques de décimales:
ici exemple de travail: https://jsfiddle.net/wpxLduLc/
la source
la source
Avec ces exemples, vous obtiendrez toujours une erreur lorsque vous essayez d'arrondir le nombre 1.005, la solution consiste à utiliser une bibliothèque comme Math.js ou cette fonction:
la source
J'ai eu quelques idées de ce post il y a quelques mois, mais aucune des réponses ici, ni les réponses d'autres posts / blogs n'ont pu gérer tous les scénarios (par exemple, les nombres négatifs et certains "numéros porte-bonheur" trouvés par notre testeur). Au final, notre testeur n'a trouvé aucun problème avec cette méthode ci-dessous. Coller un extrait de mon code:
J'ai aussi des commentaires sur le code (désolé, j'ai déjà oublié tous les détails) ... Je poste ma réponse ici pour référence future:
la source
Je résous le problème du modificateur. Prise en charge de 2 décimales uniquement.
la source
Cela devrait donner:
10.20
Cela devrait donner:
0.05
Cela devrait donner:
4.04
etc.
la source
la source
Ceci est très simple et fonctionne aussi bien que les autres:
Étant donné que toFixed () ne peut être appelé que sur des nombres et renvoie malheureusement une chaîne, cela effectue toute l'analyse pour vous dans les deux sens. Vous pouvez passer une chaîne ou un nombre, et vous obtenez un numéro à chaque fois! L'appel de parseNumber (1.49) vous donnera 1, et parseNumber (1.49,2) vous donnera 1,50. Tout comme les meilleurs d'entre eux!
la source
Vous pouvez également utiliser la
.toPrecision()
méthode et du code personnalisé et toujours arrondir au nième chiffre décimal quelle que soit la longueur de la partie int.Vous pouvez également en faire un plugin pour une meilleure utilisation.
la source
Aussi simple que cela.
la source
J'ai trouvé un moyen très simple qui a résolu ce problème pour moi et peut être utilisé ou adapté:
la source
100% de travail !!! Essayez-le
la source