Estoy usando Intl.NumberFormat() para formatear diferentes monedas correctamente. Lamentablemente, tengo un requisito que quiere que coloque todo el código al final del valor, y no al principio.
Así que algo como esto está bien, pero el código está al principio y no al final/
const number = 123456.789; // the Japanese yen doesn't use a minor unit console.log(new Intl.NumberFormat('ja-JP', { style: 'currency',currencyDisplay:'code', currency: 'JPY' }).format(number)); // expected output: JPY 123,457" // I want 123,457 JPY ¿Hay alguna manera de forzarlo al final sin tener que agregarlo manualmente al final haciendo .replace('JYP','').trim()
Creo que tendrás que manejarlo manualmente. La biblioteca Intl da formato a la posición del código/símbolo en función de la configuración regional dada. Dado que el código siempre tiene 3 caracteres alfabéticos en mayúsculas, debería ser fácil detectarlo.
const formatCurrency = (amount, locale, currency) => { const fmt = new Intl.NumberFormat(locale, { style: "currency", currencyDisplay: "code", currency }); return fmt.format(amount).replace(/^([AZ]{3})\s*(.+)$/, "$2 $1"); }; const number = 123456.789; ([ { locale: "ja-JP", currency: "JPY" }, { locale: "en-US", currency: "USD" }, { locale: "fr-FR", currency: "EUR" }, // already right-aligned ]).forEach(({ locale, currency }) => { console.log(formatCurrency(number, locale, currency)); });