Eu preciso mostrar um valor de moeda no formato de 1K igual a mil, ou 1,1K, 1,2K, 1,9K etc, se não for um número uniforme, caso contrário, se for abaixo de um mil, exibir 500, 100, 250 etc. , usando javascript para formatar o número?
javascript
jquery
formatting
numbers
Carl Weis
fonte
fonte
M
eG
?Respostas:
Parece que isso deve funcionar para você:
fonte
$mynumber_output
onde insiro isso para usá-la? Por exemplo, digamos$mynumber_output
= 12846, gostaria que 12846 fosse convertido para12.8k
Uma versão mais generalizada:
fonte
if (num >= si[i].value)
porif (Math.abs(num) >= si[i].value)
.replace(rx, "$1")
faz?1.0
torna-se1
e1.10
torna-se1.1
Aqui está uma solução simples que evita todas as
if
declarações (com o poder deMath
).Meme Bonus
O que
SI
significa?fonte
Math.abs
para adicionar suporte para números negativos, assim:var tier = Math.log10(Math.abs(number)) / 3 | 0;
.Melhorando ainda mais a resposta de Salman, pois retorna nFormatter (33000) como 33,0K
agora nFormatter (33000) = 33K
fonte
Thx @Cos para comentar, removi a dependência Math.round10.
fonte
Math.abs(num) >= decimal
.Muitas respostas nesse segmento são bastante complicadas, usando objetos Math, objetos de mapa, for-loops, regex, etc. Mas essas abordagens não melhoram realmente a legibilidade do código ou o desempenho. Uma abordagem direta parece oferecer o melhor design.
Formatação do valor em dinheiro com K
Formatando o valor em dinheiro com KMBT
Usando números negativos
fonte
'-' + formatCash(-1 * number)
Dê crédito a Waylon Flinn se você gosta deste
Isso foi aprimorado em sua abordagem mais elegante para lidar com números negativos e letras ".0".
Quanto menos loops e casos "se" você tiver, melhor a IMO.
jsFiddle com casos de teste -> https://jsfiddle.net/xyug4nvz/7/
fonte
abbreviateNumber(999999) == '1000k'
vez de'1M'
. Isso ocorre porquetoFixed()
também arredonda os números. Não tenho certeza como corrigi-lo, no entanto: /toFixed()
arredondar o número de qualquer maneira, você também pode arredondá-lo antes de enviá-lo paraabbreviateNumber()
, para que ele retorne em1M
vez de1000k
. Não é uma solução, mas uma solução alternativa.const floored = Math.floor(scaled * 10) / 10;
O ES2020 adiciona suporte para isso em
Intl.NumberFormat
Usando notação da seguinte maneira:NumberFormat
especificações:Observe que, no momento, nem todos os navegadores oferecem suporte ao ES2020, portanto, você pode precisar deste Polyfill: https://formatjs.io/docs/polyfills/intl-numberformat
fonte
notation
e,compactDisplay
embora o FireFox 77 e o Safari 13.1 ainda não o suportem, você provavelmente precisará do polyfill.isso é bastante elegante.
fonte
Você pode usar o pacote no formato d3 , modelado após o Python Advanced Format Format PEP3101 :
fonte
Melhorando ainda mais a resposta de @ Yash com suporte a números negativos:
fonte
Este post é bastante antigo, mas de alguma forma cheguei a este post procurando algo. SO para adicionar minha entrada Numeral js é a solução de uma paragem hoje em dia. Ele fornece um grande número de métodos para ajudar a formatar os números
http://numeraljs.com/
fonte
Método curto e genérico
Você pode tornar o
COUNT_FORMATS
objeto de configuração tão longo ou curto quanto desejar., Dependendo do intervalo de valores que estiver testando.fonte
Adicionando a resposta superior, isso dará 1k para 1000 em vez de 1.0k
fonte
Uma versão modificada da resposta de Waylon Flinn com suporte para expoentes negativos:
Saída esperada:
fonte
!Number.isFinite
' K M G T P E Z Y'
para' K M'
se desejar que a unidade máxima sejaM
O código abaixo é 1K = 1024, se você quiser 1K = 1000, altere todos os 1024 para 1000.
fonte
Melhorando a resposta de @ tfmontague para formatar casas decimais. 33,0k a 33k
fonte
Não satisfeito com nenhuma das soluções postadas, então aqui está minha versão:
Suporta um parâmetro de precisão
fonte
Eu vim com um código muito golfed, e é muito curto!
fonte
Melhorando ainda mais a resposta de Salman por causa de casos como nFormatter (999999,1) que retorna 1000K.
fonte
A maneira mais simples e fácil de fazer isso é
Isso funciona para qualquer número. Incluindo
L
Cr
etc.fonte
Ao eliminar o loop na solução @ martin-sznapka, você reduzirá o tempo de execução em 40%.
Teste de velocidade (200000 amostras aleatórias) para diferentes soluções deste segmento
fonte
fonte
Essa função pode transformar grandes números (positivos e negativos) em um formato de fácil leitura, sem perder a precisão:
fonte
Eu estou usando esta função. Funciona para ambos
php
ejavascript
.fonte
Decidi expandir bastante a resposta do @ Novellizator aqui para atender às minhas necessidades. Eu queria uma função flexível para lidar com a maioria das minhas necessidades de formatação sem bibliotecas externas.
Recursos
Exemplos
Função
fonte
Uau, existem muitas respostas aqui. Eu pensei em dar a você como o resolvi, pois parecia ser o mais fácil de ler, lida com números negativos e sai muito longe da faixa de número de quilos para JavaScript. Também seria fácil mudar para o que você deseja ou estender ainda mais.
fonte
Uma alternativa mais curta:
fonte