Je dois afficher une valeur de devise au format 1K égale à mille, ou 1,1K, 1,2K, 1,9K, etc., si ce n'est pas un millier pair, sinon si elle est inférieure à mille, affichez la normale 500, 100, 250, etc. , en utilisant javascript pour formater le nombre?
javascript
jquery
formatting
numbers
Carl Weis
la source
la source
M
etG
?Réponses:
Cela devrait fonctionner pour vous:
la source
$mynumber_output
où dois-je l'insérer pour l'utiliser? Par exemple, disons$mynumber_output
= 12846, je voudrais que 12846 soit converti en12.8k
Une version plus généralisée:
la source
if (num >= si[i].value)
parif (Math.abs(num) >= si[i].value)
.replace(rx, "$1")
-on?1.0
devient1
et1.10
devient1.1
Voici une solution simple qui évite toutes les
if
déclarations (avec la puissance deMath
).Bonus Meme
Que fait
SI
?la source
Math.abs
pour ajouter le support aux nombres négatifs, comme ça:var tier = Math.log10(Math.abs(number)) / 3 | 0;
.Amélioration de la réponse de Salman car elle renvoie nFormatter (33000) sous la forme 33.0K
maintenant nFormatter (33000) = 33K
la source
Merci @Cos pour commentaire, j'ai supprimé la dépendance Math.round10.
la source
Math.abs(num) >= decimal
.Beaucoup de réponses sur ce thread deviennent plutôt compliquées, en utilisant des objets Math, des objets de carte, des boucles for, des expressions régulières, etc. Mais ces approches n'améliorent pas vraiment la lisibilité du code ou les performances. Une approche simple semble offrir le meilleur design.
Formatage de la valeur en espèces avec K
Formatage de la valeur en espèces avec KMBT
Utiliser des nombres négatifs
la source
'-' + formatCash(-1 * number)
Donnez du crédit à Waylon Flinn si vous aimez ça
Cela a été amélioré par rapport à son approche plus élégante pour gérer les nombres négatifs et le cas ".0".
Moins vous avez de boucles et de cas «si», meilleure est l'OMI.
jsFiddle avec des cas de test -> https://jsfiddle.net/xyug4nvz/7/
la source
abbreviateNumber(999999) == '1000k'
au lieu de'1M'
. C'est parce quetoFixed()
arrondit également les nombres. Je ne sais pas comment le résoudre, cependant: /toFixed()
arrondit le nombre de toute façon, vous pouvez aussi arrondir le nombre avant de l'envoyer àabbreviateNumber()
, afin qu'il retourne à la1M
place de1000k
. Pas une solution, mais une solution de contournement.const floored = Math.floor(scaled * 10) / 10;
ES2020 ajoute la prise en charge de cela dans
Intl.NumberFormat
Utilisation de la notation comme suit:NumberFormat
spécifications:Notez que pour le moment, tous les navigateurs ne prennent pas en charge ES2020, vous aurez donc peut-être besoin de ce Polyfill: https://formatjs.io/docs/polyfills/intl-numberformat
la source
notation
et,compactDisplay
mais FireFox 77 et Safari 13.1 ne le prennent toujours pas en charge, vous aurez donc probablement besoin du polyfill.c'est assez élégant.
la source
Vous pouvez utiliser le package au format d3 inspiré du formatage de chaîne avancé Python PEP3101 :
la source
Améliorer encore la réponse de @ Yash avec la prise en charge des nombres négatifs:
la source
Ce message est assez ancien mais j'ai en quelque sorte atteint ce message à la recherche de quelque chose. Donc, pour ajouter mon entrée Numeral js est la solution à guichet unique maintenant quelques jours. Il donne un grand nombre de méthodes pour aider à formater les nombres
http://numeraljs.com/
la source
Méthode courte et générique
Vous pouvez rendre l'
COUNT_FORMATS
objet de configuration aussi long ou court que vous le souhaitez, en fonction de la plage de valeurs que vous testez.la source
En ajoutant la première réponse, cela donnera 1k pour 1000 au lieu de 1,0k
la source
Une version modifiée de la réponse de Waylon Flinn avec prise en charge des exposants négatifs:
Production attendue:
la source
!Number.isFinite
' K M G T P E Z Y'
pour' K M'
si vous voulez que l'unité maximale soitM
Le code ci-dessous est 1K = 1024, si vous voulez 1K = 1000, changez tous les 1024 en 1000.
la source
Amélioration de la réponse de @ tfmontague pour formater les décimales. 33,0k à 33k
la source
Je ne suis satisfait d'aucune des solutions publiées, voici donc ma version:
Prend en charge un paramètre de précision
la source
J'en ai trouvé un très codé au golf, et il est très court!
la source
Amélioration de la réponse de Salman grâce aux cas comme nFormatter (999999,1) qui renvoie 1000K.
la source
Le moyen le plus simple et le plus simple de procéder est
Cela fonctionne pour n'importe quel nombre. Y compris
L
Cr
etc.la source
En éliminant la boucle dans la solution @ martin-sznapka, vous réduirez le temps d'exécution de 40%.
Test de vitesse (200000 échantillons aléatoires) pour une solution différente de ce fil
la source
la source
Cette fonction peut transformer des nombres énormes (positifs et négatifs) en un format convivial pour les lecteurs sans perdre sa précision:
la source
J'utilise cette fonction. Cela fonctionne pour les deux
php
etjavascript
.la source
J'ai décidé de développer beaucoup la réponse de @ Novellizator ici pour répondre à mes besoins. Je voulais une fonction flexible pour gérer la plupart de mes besoins de formatage sans bibliothèques externes.
Caractéristiques
Exemples
Fonction
la source
Wow, il y a tellement de réponses ici. Je pensais que je pourrais vous expliquer comment je l'ai résolu car il semblait être le plus facile à lire, gère les nombres négatifs et va loin dans la plage de nombres kilos pour JavaScript. Il serait également facile de changer ce que vous voulez ou d'étendre encore plus loin.
la source
Une alternative plus courte:
la source