Привет, товарищи программисты, я хочу поговорить о кое-чем довольно обыденном, но невероятно важном: форматировании валюты в JavaScript. Я работаю в этой области уже много лет, и, несмотря на то, что я работал над широким кругом проектов, эта тема неожиданно возникла во время одного из моих проектов веб-разработки. Это не кричаще, но правильное понимание имеет значение.
Intl.NumberFormat в помощь
К счастью, в JavaScript есть готовое решение для обработки интернационализации: Intl
API. Этот глобальный объект представляет собой кладезь методов для обработки дат, чисел и валют, среди прочего.
Для наших целей волшебство происходит с методом Intl.NumberFormat
. Позвольте мне показать вам, как это работает с некоторым кодом.
const amount = 1234.56; const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', }); console.log(formatter.format(amount)); // "$1,234.56"
Что мы здесь делаем, так это инициализируем новый экземпляр Intl.NumberFormat
с «en-US» в качестве локали и объект параметров, в котором мы указываем стиль как «валюту» и валюту как «USD». Когда мы запускаем formatter.format(amount)
, мы получаем наше число в формате строки валюты с символом доллара США.
В этом суть. Но как насчет других валют или локалей? Вот где действительно проявляется универсальность Intl.NumberFormat
.
const amount = 1234.56; const formatterEuro = new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR', }); console.log(formatterEuro.format(amount)); // "1.234,56 €"
Здесь мы отформатировали ту же сумму, что и в евро, согласно немецкому соглашению. Обратите внимание на положение символа валюты и использование запятой в качестве десятичного разделителя.
Помните об углах
Хотя Intl.NumberFormat
мощный, он не идеален.
Одна проблема, с которой я столкнулся во время работы над проектом электронной коммерции, касалась очень точных сумм. Здесь округление может быть проблемой. Обходной путь для этого состоит в том, чтобы сначала преобразовать ваше число в центы (или наименьшую единицу вашей валюты), а затем разделить на 100 в процессе форматирования.
const amountInCents = 123456; const formatter = new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD', minimumFractionDigits: 2, }); console.log(formatter.format(amountInCents / 100)); // "$1,234.56"
Подведение итогов
Форматирование валюты в JavaScript может быть не первым делом в списке изучения разработчика, но когда вы имеете дело с интернационализированными приложениями, очень удобно знать, как использовать такие инструменты, как Intl.NumberFormat
.
Это все для этого поста. Я просто хотел поделиться своим опытом форматирования валюты и надеюсь, что вы нашли его полезным. Давайте продолжать учиться и совершенствовать свое ремесло по ходу дела.
- Веб-документы MDN: Intl.NumberFormat: исчерпывающее руководство по
Intl.NumberFormat
от веб-документов MDN Mozilla. - Как использовать JavaScript Intl API для форматирования дат, валют и чисел: исчерпывающее руководство, описывающее основы JavaScript Intl API, включая форматирование валюты.
- ✌️Если вы планируете подписаться на Medium, пожалуйста, не стесняйтесь использовать эту ссылку. Вам ничего не будет стоить, а мне очень поможет
- 👏 Хлопайте в ладоши, чтобы эта статья попала в топ
- 🔔Подпишитесь на меня в Медиуме