The problem
Need to display monetary values with proper currency formatting
The solution
function formatMoney(amount, currency = 'USD', locale = 'en-US') {
return new Intl.NumberFormat(locale, {
style: 'currency',
currency: currency,
minimumFractionDigits: 2,
maximumFractionDigits: 2
}).format(amount);
}
// Alternative: Custom formatting without Intl
function formatMoneyBasic(amount, currency = '$', decimalPlaces = 2) {
const formatted = Math.abs(amount).toFixed(decimalPlaces);
const sign = amount < 0 ? '-' : '';
return `${sign}${currency}${formatted.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`;
}Parameters
amountnumberThe monetary amount to format
currencystringCurrency code (default: 'USD')
localestringLocale for formatting (default: 'en-US')
Put it to work
console.log(formatMoney(1234.56)); // "$1,234.56"
console.log(formatMoney(99.99, 'EUR', 'de-DE')); // "99,99 €"
console.log(formatMoney(5000, 'JPY', 'ja-JP')); // "¥5,000"
// Using basic formatter
console.log(formatMoneyBasic(1234.56)); // "$1,234.56"
console.log(formatMoneyBasic(-99.99, '£')); // "-£99.99"