Ai-je manqué un appel d'API standard qui supprime les zéros insignifiants de fin d'un nombre?
Ex.
var x = 1.234000 // to become 1.234;
var y = 1.234001; // stays 1.234001
Number.toFixed () et Number.toPrecision () ne sont pas tout à fait ce que je recherche.
javascript
regex
math
numbers
Steven
la source
la source
1.234000 === 1.234
.parseFloat(n)
?Réponses:
Si vous le convertissez en chaîne, il n'affichera pas de zéros à la fin, qui ne sont pas stockés dans la variable en premier lieu car il a été créé en tant que nombre, pas en tant que chaîne.
la source
var n = 1.245000000000001
( en supposant qu'il est insignifiant pour être représenté à l' utilisateur)J'avais une instance similaire où je voulais utiliser
.toFixed()
si nécessaire, mais je ne voulais pas le rembourrage quand ce n'était pas le cas. J'ai donc fini par utiliser parseFloat en conjonction avec toFixed.toFixed sans rembourrage
Une autre option qui fait presque la même chose
Cette réponse peut vous aider dans votre décision
toFixed
arrondira / complétera le nombre à une longueur spécifique, mais le convertira également en chaîne. La reconversion en un type numérique rendra non seulement le nombre plus sûr à utiliser arithmétiquement, mais supprimera également automatiquement tous les 0 à la fin. Par exemple:Parce que même si vous définissez un nombre avec des zéros à la fin, ils sont supprimés.
la source
parseFloat(n).toFixed(4);
au lieu de votre réponse réelle. Je suis désolé.+(n.toFixed(4))
?J'ai d'abord utilisé une combinaison de matti-lyra et de réponses de Gary:
Résultats:
Le cas quelque peu problématique est 0,10001. J'ai fini par utiliser cette version plus longue:
Mise à jour : Et voici la version la plus récente de Gary (voir les commentaires):
Cela donne les mêmes résultats que ci-dessus.
la source
toFixed(4).replace(/([0-9]+(\.[1-9]+)?)(\.?0+$)/,"$1")
([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)
replace(/[,.][1-9]+(0+)/,'')
?La
toFixed
méthode effectuera l'arrondi approprié si nécessaire. Il ajoutera également des zéros de fin, ce qui n'est pas toujours idéal.Si vous convertissez la valeur de retour en un nombre, ces zéros de fin seront supprimés. C'est une approche plus simple que de faire vos propres calculs d'arrondi ou de troncature.
la source
toFixed
appel). c'est un cas de bord UX étrange.J'avais fondamentalement la même exigence et j'ai constaté qu'il n'y avait pas de mécanisme intégré pour cette fonctionnalité.
En plus de couper les zéros de fin, j'ai également eu besoin d'arrondir et de formater la sortie pour les paramètres régionaux actuels de l'utilisateur (c'est-à-dire 123 456 789).
Tout mon travail à ce sujet a été inclus sous le nom prettyFloat.js (sous licence MIT) sur GitHub: https://github.com/dperish/prettyFloat.js
Exemples d'utilisation:
Mise à jour - août 2018
Tous les navigateurs modernes prennent désormais en charge l' API ECMAScript Internationalization , qui fournit une comparaison de chaînes sensible à la langue, la mise en forme des nombres et la mise en forme de la date et de l'heure.
Pour les navigateurs plus anciens, vous pouvez utiliser ce polyfill: https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
la source
Pourquoi ne pas multiplier par un comme ça?
la source
Vous pouvez essayer celui-ci pour réduire les nombres flottants
la source
Réponse pure regex
Je me demande pourquoi personne n'en a donné!
la source
J'avais également besoin de résoudre ce problème lorsque Django affichait des valeurs de type décimal dans un champ de texte. Par exemple, lorsque «1» était la valeur. Il afficherait «1.00000000». Si '1.23' était la valeur, il afficherait '1.23000000' (dans le cas d'un paramètre 'decimal_places' de 8)
Utiliser parseFloat n'était pas une option pour moi car il est possible qu'il ne renvoie pas exactement la même valeur. toFixed n'était pas une option car je ne voulais rien arrondir, j'ai donc créé une fonction:
la source
Aucune de ces solutions n'a fonctionné pour moi pour de très petits nombres. http://numeraljs.com/ a résolu cela pour moi.
la source
Si vous ne pouvez pas utiliser les flottants pour une raison quelconque (comme les flotteurs d'argent impliqués) et que vous commencez déjà à partir d'une chaîne représentant un nombre correct, vous pouvez trouver cette solution pratique. Il convertit une chaîne représentant un nombre en une chaîne représentant un nombre sans zéros de fin.
la source
Après avoir lu toutes les réponses - et commentaires - je me suis retrouvé avec ceci:
Je sais que l'utilisation
eval
peut être nuisible d'une manière ou d'une autre, mais cela m'a beaucoup aidé.Alors:
Si vous souhaitez limiter les décimales, utilisez
toFixed()
comme d'autres l'ont indiqué.C'est tout.
la source
J'avais besoin de supprimer tous les zéros de fin, mais gardez au moins 2 décimales, y compris les zéros.
Les nombres avec lesquels je travaille sont 6 chaînes de nombres décimaux, générées par .toFixed (6).
Résultat attendu:
Solution:
Logique:
Exécutez la fonction de boucle si le dernier caractère de la chaîne est un zéro.
Supprimez le dernier caractère et mettez à jour la variable chaîne.
Si le dernier caractère de la chaîne mise à jour n'est pas un zéro, terminer la boucle.
Si la chaîne mise à jour du troisième au dernier caractère est une virgule flottante, terminer la boucle.
la source
Voici une solution possible:
la source
parseFloat()
sera tout à fait approprié.