J'avais pratiquement la même exigence, et j'ai constaté qu'il n'existe pas de mécanisme intégré pour cette fonctionnalité.
Outre la suppression des zéros de fin, j'ai également dû arrondir et formater la sortie pour la locale actuelle de l'utilisateur (c'est-à-dire 123 456 789).
Tout mon travail sur ce sujet a été inclus dans prettyFloat.js (sous licence MIT) sur GitHub : https://github.com/dperish/prettyFloat.js
Exemples d'utilisation :
prettyFloat(1.111001, 3) // "1.111"
prettyFloat(1.111001, 4) // "1.111"
prettyFloat(1.1111001, 5) // "1.1111"
prettyFloat(1234.5678, 2) // "1234.57"
prettyFloat(1234.5678, 2, true) // "1,234.57" (en-us)
Mise à jour - août 2018
Tous les navigateurs modernes prennent désormais en charge la fonction API d'internationalisation ECMAScript qui permet de comparer des chaînes de caractères en fonction de la langue, de formater des nombres et de formater la date et l'heure.
const formatters = {
default: new Intl.NumberFormat(),
currency: new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
whole: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 }),
oneDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 1, maximumFractionDigits: 1 }),
twoDecimal: new Intl.NumberFormat('en-US', { style: 'decimal', minimumFractionDigits: 2, maximumFractionDigits: 2 })
};
formatters.twoDecimal.format(1234.5678); // result: "1,234.57"
formatters.currency.format(28761232.291); // result: "$28,761,232"
Pour les navigateurs plus anciens, vous pouvez utiliser ce polyfill : https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en
6 votes
Hum,
1.234000 === 1.234
.5 votes
Oui, si vous faites alert(x), il s'affiche sans les zéros de fin.
79 votes
Après avoir travaillé avec un certain nombre de clients, je peux témoigner que même si 1,234000 === 1,234, les clients ne veulent pas voir ces zéros supplémentaires s'ils n'en ont pas besoin.
33 votes
Utilisez
parseFloat(n)
?0 votes
C'était la solution la plus simple qui couvrait tous les cas limites pour moi, merci @Mr.Alien.
0 votes
La question semble couvrir comment supprimer important les zéros de fin ? c'est ce que je cherche même si ce n'est pas le cas techniquement correct. pour les flottants non liés à l'argent, l'élimination des zéros excédentaires (
75.0%
a75%
) est simplement "logique" pour les utilisateurs finaux.0 votes
Ma question est la suivante : les zéros de tête sont-ils insignifiants ? D'un point de vue mathématique, 1,2300 signifie : 4 chiffres derrière le point sont exacts. et 1,23 signifie : seulement 2 chiffres exacts, peut-être arrondis. Exemple : Comparer 12m et 12.00m