Formatação Nativa de Moeda e Números em JavaScript com Intl.NumberFormat

Formatação Nativa de Moeda e Números em JavaScript com Intl.NumberFormat

Formatar valores numéricos, moedas e porcentagens manualmente usando expressões regulares ou manipulação de strings gera código frágil e sujeito a erros de localização. O objeto nativo Intl.NumberFormat resolve esse problema ao fornecer uma API padronizada e performática para internacionalizar números de acordo com o idioma e a região desejados.

JavaScript

/**
 * Formata um número conforme a moeda e a localização especificadas.
 * @param {number} valor - Número a ser formatado.
 * @param {string} locale - Código BCP 47 de localização (ex: 'pt-BR', 'en-US').
 * @param {string} moeda - Código de moeda ISO 4217 (ex: 'BRL', 'USD').
 * @returns {string} Valor formatado com símbolo e pontuação adequados.
 */
function formatarMoeda(valor, locale = 'pt-BR', moeda = 'BRL') {
  return new Intl.NumberFormat(locale, {
    style: 'currency',
    currency: moeda
  }).format(valor);
}

/**
 * Formata um valor decimal como taxa percentual.
 * @param {number} valor - Valor decimal (ex: 0.15 para 15%).
 * @param {string} locale - Código de localização.
 * @returns {string} Valor formatado em porcentagem.
 */
function formatarPorcentagem(valor, locale = 'pt-BR') {
  return new Intl.NumberFormat(locale, {
    style: 'percent',
    minimumFractionDigits: 2,
    maximumFractionDigits: 2
  }).format(valor);
}

// --- Exemplo Prático de Uso ---
const quantia = 1250.5;
const taxa = 0.085;

console.log('Real (BRL):', formatarMoeda(quantia, 'pt-BR', 'BRL')); // R$ 1.250,50
console.log('Dólar (USD):', formatarMoeda(quantia, 'en-US', 'USD')); // $1,250.50
console.log('Euro (EUR):', formatarMoeda(quantia, 'de-DE', 'EUR'));  // 1.250,50 €
console.log('Porcentagem:', formatarPorcentagem(taxa));            // 8,50%

Pontos-chave

  • Supressão de Bibliotecas Externas: Elimina a necessidade de pacotes pesados como Moment.js ou Numeral.js, utilizando recursos 100% nativos da linguagem sem impacto no bundle final.
  • Opções de Estilo (style): Aceita valores como 'currency' (moeda), 'percent' (porcentagem), 'decimal' (padrão) e 'unit' (unidades como km/h, kg).
  • Controle de Casas Decimais: Permite ajustar a precisão exibida utilizando as propriedades minimumFractionDigits e maximumFractionDigits.
  • Dica de Performance: Para iterar sobre grandes volumes de dados (ex: relatórios ou tabelas), instancie new Intl.NumberFormat() uma única vez fora do loop e reutilize o método .format().

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *