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
minimumFractionDigitsemaximumFractionDigits. - 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().
