Как показать цену через Intl.NumberFormat в JavaScript

Как показать цену через Intl.NumberFormat в JavaScript
Содержание статьи

Intl.NumberFormat форматирует число по правилам выбранной локали. Для цены задайте style: "currency" и передайте код валюты. На Mentoring.digital покажем, как вывести сумму и сохранить возможность отдельно стилизовать обозначение валюты.

Локаль и валюта задаются отдельно

В примере сумма уже рассчитана и выражена в евро. de-DE управляет разделителями и размещением обозначения валюты, а EUR задаёт валюту. Один экземпляр форматтера удобно использовать для нескольких сумм с одинаковыми настройками.

const euro = new Intl.NumberFormat("de-DE", {
  style: "currency",
  currency: "EUR",
});

console.log(euro.format(1234.5));
console.log(euro.formatToParts(1234.5));

В немецкой локали у примера десятичная запятая, разделитель тысяч и обозначение евро после числа. Между частями могут быть специальные пробелы. Если интерфейсу нужно выделить валюту, обработайте массив из formatToParts(), где у каждой части есть type и value. Сохраните их порядок.

Как проверить число дробных знаков

const yen = new Intl.NumberFormat("ja-JP", {
  style: "currency",
  currency: "JPY",
});

console.log(yen.resolvedOptions().maximumFractionDigits);
// 0

По умолчанию формат валюты учитывает число дробных знаков, предусмотренное для неё. Если экрану нужны явные границы, задайте minimumFractionDigits и maximumFractionDigits в согласованных настройках. Форматтер формирует строку для отображения. Расчёты и пересчёт между валютами выполняются отдельно.

Что сравнивать в тесте интерфейса

Проверьте отрицательную сумму, ноль и число, где ожидается округление. Для правил локали сравните значимые части строки, например fraction и currency. Так тесту не придётся угадывать, какой пробел вставила среда выполнения.

Форматирование данных можно закрепить на практическом курсе JavaScript и обсудить тесты интерфейса с ментором по фронтенду.

Похожие статьи по данной теме