JavaScript: arrondi à un nombre de décimales, mais bande de zéros supplémentaires
Voici le scénario: je suis .9999999999999999
quand je devrais être en train de 1.0
.
Je peux me permettre de perdre un nombre de décimales de précision, donc je suis en utilisant .toFixed(15)
, le type de travaux.
L'arrondi fonctionne, mais le problème est que je me suis donné 1.000000000000000
.
Est-il un moyen pour arrondir à un nombre de décimales, mais la bande supplémentaire espaces?
Remarque: .toPrecision
n'est pas ce que je veux; je veux seulement pour spécifier le nombre de chiffres après le point décimal.
Note 2: je ne peut pas utiliser de .toPrecision(1)
parce que j'ai besoin de garder la haute précision pour les nombres qui ont réellement des données après le point décimal. Idéalement, il serait exactement autant de décimales que nécessaire (jusqu'à 15).
- Le point étant que .toFixed retourne une Chaîne de caractères, donc il suffit d'aller-retour via un Numéro et ensuite revenir à une Chaîne de reconvertir sans les zéros de fin.
- juste pour avoir des précisions. Voulez-vous simplement à supprimer les zéros à droite dans la chaîne de caractères que vous avez obtenu avec toFixed()?
Vous devez vous connecter pour publier un commentaire.
-2.34.toFixed(1)
retourne-2.3
en raison de la la priorité de l'opérateur.parseFloat
fonction:+number.toFixed(13)
Cette expression peut également être utilisé pour supprimer le JavaScript nombre d'inexactitudes comme dans 1.0000000000000045.Oui, il y a un moyen. Utilisation
parseFloat()
.Voir un exemple ici: http://jsfiddle.net/nayish/7JBJw/
parseFloat("0.0000007")
, qui donne"7e-7"
Que je comprends, vous voulez supprimer les zéros à droite dans la chaîne de caractères que vous avez obtenu via
toFixed()
. C'est une pure opération de chaîne:...replace(/\.?0+$/, "");
).0
devient la chaîne vide""
, et-0
devient-
, ni de ce qui est prévu (au jugé). @zach-neige de votre solution proposée également échoue sur 0 et -0.Number(n.toFixed(15)) or +(n.toFixed(15))
vous permet de convertir le 15, place une chaîne décimale d'un nombre, la suppression des zéros à la fin.Si vous lancez la valeur de retour pour un certain nombre, ceux des zéros à la fin sera abandonné. C'est également la moins bavarde que
parseFloat()
est.Il utilise le unaire + opérateur, donc si vous utilisez ce dans le cadre d'une opération de chaîne, vous devez avoir un infixe + avant:
var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));
. Pour info unaire + en face d'une chaîne de caractères convertit en Nombre. De MDN: Unaire + peut:+(4.1).toFixed(4)
est4.1
dans Chrome 60.+(4).toFixed(2)
. Unaire opérateur + est critique car il supprime les zéros de fin (tout en restant le traitement de Numéro de coin-cas correctement). Par exemple au niveau de la console d'essayer:console.log('answer:' + +(4).toFixed(2));
imprimeanswer:4
.Mmmm, un peu différent de réponse, pour la croix-navigateur internet:
Aucun de ces m'a vraiment fait ce que je cherchais, basé sur la question du titre, qui a été, par exemple, pour 5.00 de 5 et 5.10 être 5.1. Ma solution a été comme suit:
Remarque: La regex ne fonctionne que si
places > 0
P. S. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed
5e30
(changements de nombre de5e3
). Le coin des cas sont diaboliques!Il y a une meilleure méthode qui permet de conserver une précision et aussi des bandes de zéros. Cela prend un nombre d'entrée et par le biais de la magie de casting va lâcher tout les zéros à droite. J'ai trouvé 16 à la précision de la limite pour moi, ce qui est assez bon si vous n'êtes pas à mettre un satellite de pluton.