Formatador de números
Formate números com vírgulas, abreviações, símbolos de moeda e decimais personalizadas.
Como funciona
- Insira seu número : digite ou cole um valor numérico, inteiros, decimais, números grandes ou notação científica.
- Escolha as opções de formato : selecione sua localidade (US, EU etc.), o número de decimais, o separador de agrupamento e o símbolo de moeda, se necessário.
- Copie o resultado formatado : o número é exibido no formato escolhido instantaneamente. Copie-o para uso em relatórios, documentos ou exportações.
Por que usar o formatador de números ?
Os números significam coisas diferentes conforme as localidades. Os Estados Unidos escrevem mil como 1,000.00 enquanto muitos países europeus o escrevem como 1.000,00. Copiar números brutos entre sistemas causa erros de análise, leituras incorretas e erros financeiros. O formatador de números garante que seus números sejam exibidos corretamente para qualquer público, preparação de relatórios financeiros, localização de conteúdo ou limpeza de dados para apresentação.
Funcionalidades
- Formatação adaptada à localidade : suporta os formatos US, EU e internacionais com separadores decimais e de agrupamento corretos.
- Controle de precisão dos decimais : defina exatamente quantos decimais exibir.
- Agrupamento dos milhares : adicione ou remova os separadores de milhares em um clique.
- Formatação monetária : acrescente um símbolo de moeda e formate como um valor monetário.
- Notação científica : converta de ou para a notação científica para números muito grandes ou muito pequenos.
Perguntas frequentes
Qual a diferença entre o formato numérico US e o europeu ?
Nos Estados Unidos, o separador decimal é um ponto (.) e o separador de milhares é uma vírgula (,), por ex. 1,234.56. Na maior parte da Europa é o inverso : 1.234,56. Esta ferramenta converte corretamente entre os dois formatos.
Posso formatar números para moedas ?
Sim. Ative o modo monetário e escolha um símbolo (R$ $ € £ ¥ etc.) para colocá-lo antes do número formatado. Para formatos contábeis com convenções de números negativos, ative o modo contábil.
Ele lida com números muito grandes ou muito pequenos ?
Sim. O formatador lida com números de vários dígitos e pode exibi-los em notação padrão, agrupada ou científica. A precisão em ponto flutuante é aplicada conforme os decimais configurados.
De onde vêm os padrões de formatação de números
Os formatos numéricos que você vê em software hoje são definidos por uma pequena pilha de padrões que demorou trinta anos para se consolidar. IEEE 754 (1985), revisada em 2008 e 2019, fixou o layout binário dos números de ponto flutuante: 64 bits divididos em 1 sinal, 11 expoente, 52 mantissa, que é o que cada número JavaScript é por baixo dos panos. ISO 4217 (1978, edição atual 2015) definiu os códigos de moeda de três letras, USD, EUR, JPY, INR, BRL, e quantas unidades menores cada um tem (2 para USD, 0 para JPY, 3 para KWD, 4 para CLF). O Unicode CLDR (Common Locale Data Repository), lançado pela primeira vez em 2003, é o conjunto de dados aberto que registra separadores de grupo, separadores decimais, símbolos de moeda e regras de plural para cada locale; a versão atual é CLDR 46 (outubro de 2024). ECMA-402 (2012), a API de Internacionalização do ECMAScript, deu ao JavaScript uma ligação nativa para esses dados via Intl.NumberFormat, que é apoiado pelo ICU (International Components for Unicode) em V8, JavaScriptCore e SpiderMonkey. Juntas essas quatro specs fazem com que (1234567).toLocaleString('de-DE') retorne 1.234.567 em vez de 1,234,567.
Os seis padrões de locale que você encontrará
A maioria dos formatos numéricos na natureza se enquadra em seis padrões. Memorizar esses seis cobre ~95% da base de usuários de qualquer produto global.
- en-US, en-GB, ja-JP, zh-CN, ko-KR, grupo vírgula, decimal ponto:
1,234,567.89. - de-DE, es-ES, it-IT, nl-NL, pt-BR, grupo ponto, decimal vírgula:
1.234.567,89. Cuidado ao colar isto numa planilha americana. - fr-FR, ru-RU, sv-SE, pl-PL, grupo espaço estreito sem quebra (Unicode U+202F), decimal vírgula:
1 234 567,89. O separador não é um espaço regular; copiar e colar através de sistemas que normalizam espaços irá corrompê-lo. - de-CH, grupo aspas simples direita (U+2019), decimal ponto:
1’234’567.89. A Suíça é única aqui. - en-IN, hi-IN, grupo vírgula, decimal ponto, mas o agrupamento é 2-2-3 em vez de 3-3-3:
12,34,567.89. Isto reflete o sistema lakh/crore: 1 lakh = 10⁵, 1 crore = 10⁷. - ar-EG, ar-SA, dígitos arábigo-índicos (٠١٢٣٤٥٦٧٨٩), decimal árabe U+066B, separador de milhares árabe U+066C:
١٬٢٣٤٬٥٦٧٫٨٩. A maioria dos ambientes de desenvolvimento arabófonos usa dígitos latinos internamente e só muda para exibição.
Modos de arredondamento, o que realmente fazem
ECMA-402 (2023) adicionou nove modos de arredondamento ao Intl.NumberFormat. A escolha muda totais financeiros, relatórios científicos e cálculos fiscais. Três importam mais na prática.
halfExpand(padrão). 2,5 arredonda para 3, −2,5 arredonda para −3. Este é o arredondamento que todos aprenderam na escola e o padrão do JavaScript.halfEven(arredondamento do banqueiro). 2,5 arredonda para 2, 3,5 arredonda para 4, empates sempre vão para o dígito par. Exigido pelo IEEE 754 para aritmética de ponto flutuante. Usado em tabelas fiscais americanas, computação científica e grandes sistemas contábeis para remover um pequeno viés sistemático quehalfExpandintroduz ao longo de milhões de arredondamentos.trunc. Descarta tudo após o corte sem arredondar. 2,9 para 2, −2,9 para −2. Usado quando você literalmente quer descartar precisão, nunca para dinheiro.- Os outros seis (
ceil,floor,expand,halfCeil,halfFloor,halfTrunc) lidam com casos especializados como sempre arredondar para cima para custos de envio ou sempre para baixo para descontos fiscais. Escolha deliberadamente, não aceite o padrão se dinheiro ou conformidade estiverem em jogo.
Onde esta ferramenta ganha seu sustento
- Relatórios financeiros. Formate receita, despesas, índices para apresentações. Alterne entre formatos US e EU para corresponder ao país da audiência.
- Verificação de locale da sua loja. Digite um preço no formato desejado e verifique se corresponde ao que seu site de e-commerce renderiza para um cliente na Alemanha ou Índia.
- Preparação CSV. Converta linhas alemãs
1.234,56para US1234.56antes de importar para uma planilha que espera decimal ponto, ou vice-versa. - Formatação rupia indiana. Transforme 12.500.000 em 1,25,00,000 (1,25 crore) para audiências sul-asiáticas. A maioria das ferramentas construídas nos EUA não faz isso.
- Exibição compacta para dashboards. Transforme 1.234.567 em
1.23Mpara widgets onde o espaço horizontal é restrito. A notação compacta também é locale-aware: o alemão mostra1,23 Mio. - Símbolo de moeda como prefixo. Adicione $, €, £, ¥, ₹ na posição correta para cada locale, o dólar americano fica na frente, o euro alemão fica atrás.
- Escape de notação científica Excel. Grandes IDs colados como snowflakes do Twitter são convertidos para
1.23E+18e perdem precisão. Formate-os com agrupamento mais apóstrofo inicial antes de colar para que o Excel os trate como texto.
Erros que mordem até desenvolvedores experientes
- Aritmética de ponto flutuante em dinheiro.
0.1 + 0.2 === 0.30000000000000004em toda linguagem IEEE 754, não apenas JavaScript. Armazene moeda como unidades menores inteiras (centavos) ou use uma biblioteca decimal comodecimal.js. A formatação esconde o erro, ela não o corrige. - Parsing ingênuo de strings de locale.
parseFloat("1,234.56")retorna1, não1234.56.parseFloat("1.234,56")retorna1.234. Para parsear um número formatado em locale, remova separadores de grupo e então substitua a marca decimal, idealmente direcionado porIntl.NumberFormat(locale).formatToParts(). - Perda de precisão em inteiros grandes. Inteiros acima de
2⁵³ − 1 = 9 007 199 254 740 991perdem silenciosamente precisão quando armazenados comonumber. IDs do Twitter, IDs do Stripe, hashes de transação blockchain todos excedem isso. Receba-os como strings ou useBigInt;Intl.NumberFormataceita BigInt nativamente. - Unidades menores estilo Stripe. Stripe envia
amount: 499para $4.99. Divida por 100 (ou pela contagem de unidades menores ISO 4217 para a moeda) antes de formatar. JPY, KRW, VND, ISK, HUF usam 0 unidades menores, nenhuma divisão necessária. - Entrada de percentual é uma fração.
new Intl.NumberFormat('en', {style: 'percent'}).format(0.5)retorna50%, não0.5%. Multiplique seu valor armazenado por 0,01 antes de formatar se você o armazenou como percentual. - Construir NumberFormat em um loop quente. Cada chamada de construtor carrega dados de locale do ICU. Reutilize uma única instância entre chamadas: 1M de formatações com uma instância em cache leva ~60 ms em V8, ~3 s se você construir do zero a cada vez.
- JPY com duas casas decimais.
¥1000.00está errado porque JPY tem 0 unidades menores. DefinaminimumFractionDigits: 0, maximumFractionDigits: 0para JPY, KRW, VND, ISK, HUF, CLP.
Mais perguntas frequentes
Por que 0,1 + 0,2 não é igual a 0,3?
Porque os floats binários IEEE 754 não podem armazenar a fração decimal 0,1 exatamente, da mesma forma que a base 10 não pode armazenar 1/3 exatamente. O double de 64 bits mais próximo de 0,1 é aproximadamente 0,1000000000000000055511151231257827021181583404541015625. Somar duas dessas aproximações produz um resultado que arredonda para 0,30000000000000004 em vez de 0,3. Toda linguagem IEEE 754 tem esse comportamento: Java, Python, C++, Swift, todas. Para aritmética decimal exata, use centavos inteiros ou uma biblioteca como decimal.js / Decimal do Python / BigDecimal do Java.
Qual é a diferença entre Intl.NumberFormat e toLocaleString?
Mesmo motor, ergonomia diferente. (1234.5).toLocaleString('de-DE', {style: 'currency', currency: 'EUR'}) e new Intl.NumberFormat('de-DE', {style: 'currency', currency: 'EUR'}).format(1234.5) produzem saída idêntica. A diferença: Intl.NumberFormat é reutilizável, então se você formatar muitos números com as mesmas opções, instancie uma vez e cacheie. toLocaleString lê as opções do construtor a cada chamada e é dramaticamente mais lento em loops apertados.
Como funciona o sistema de numeração indiano?
O inglês indiano e o hindi agrupam dígitos em padrão 2-2-3 em vez de 3-3-3: os três dígitos mais à direita, depois grupos de dois. 100.000 é escrito 1,00,000 e chamado um lakh (10⁵). 10.000.000 é escrito 1,00,00,000 e chamado um crore (10⁷). Intl.NumberFormat('en-IN').format(12345678) retorna 1,23,45,678. O sistema se estende para arab (10⁹) e kharab (10¹¹) embora sejam raros no uso moderno.
Quão grande um número esta ferramenta pode manejar?
Até Number.MAX_SAFE_INTEGER = 2⁵³ − 1 = 9.007.199.254.740.991, qualquer inteiro sobrevive a uma viagem de ida e volta exatamente. Além disso, a precisão começa a vazar. JSON.parse("9007199254740993") retorna 9007199254740992, o double representável mais próximo. Para valores maiores, cole-os como literais BigInt (com um n no final) ou trate-os como strings. O formatador aceita ambos.
Meu número é enviado a algum lugar?
Não. Intl.NumberFormat e os dados de locale vêm com seu navegador; todo o pipeline executa localmente. Abra a aba Rede no DevTools e formate um número, você verá zero requisições de saída. Seguro para salários, receita, saldos de conta, ou qualquer dado que você não colaria em um serviço hospedado.