ISO 4217 — международный стандарт, определяющий систему кодов для
представления валют. В JavaScript через Intl API эти коды
используются как основной способ идентификации валют при форматировании
чисел.
Каждый код валюты состоит из трёх букв:
Примеры:
Такое представление обеспечивает однозначность и исключает конфликт названий валют между разными языками и регионами.
1. Универсальность идентификаторов
Коды не зависят от локализации. Независимо от языка интерфейса, USD остаётся USD, а EUR — EUR.
2. Поддержка дробных единиц
Большинство валют имеют фиксированное количество знаков после запятой:
3. Специальные коды
Помимо национальных валют существуют коды для:
Эти коды начинаются с буквы X и используются в финансовых системах и биржевых данных.
В JavaScript форматирование валют реализуется через
Intl.NumberFormat. Основной параметр —
style: "currency", а также обязательное указание валютного
кода ISO 4217.
Базовая структура:
new Intl.NumberFormat(locale, {
style: "currency",
currency: "USD"
});
const formatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD"
});
formatter.format(1234.56);
// $1,234.56
const formatterKZ = new Intl.NumberFormat("ru-KZ", {
style: "currency",
currency: "KZT"
});
formatterKZ.format(1234.56);
// 1 234,56 ₸
Форматирование зависит от локали, но валюта определяется исключительно ISO-кодом.
currencyDisplay управляет тем, как отображается
валюта:
Используется символ валюты:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "symbol"
}).format(100);
// $100.00
Отображается ISO-код:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "code"
}).format(100);
// USD 100.00
Полное название валюты:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "name"
}).format(100);
// 100.00 US dollars
Компактный символ (используется в ограниченных интерфейсах):
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencyDisplay: "narrowSymbol"
}).format(100);
Параметр currencySign влияет на отображение
отрицательных значений.
Обычное представление:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencySign: "standard"
}).format(-100);
// -$100.00
Бухгалтерский формат — отрицательные числа в скобках:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
currencySign: "accounting"
}).format(-100);
// ($100.00)
Этот формат широко используется в финансовых отчётах.
Если передан несуществующий код валюты:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "ABC"
});
возникает ошибка RangeError.
Intl API строго валидирует соответствие ISO 4217.
Каждая валюта имеет параметры:
minimumFractionDigitsmaximumFractionDigitsОни автоматически задаются согласно стандарту.
Пример:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "JPY"
}).format(1234.56);
// ¥1,235
Дробная часть округляется, потому что японская иена не использует центы.
Один и тот же ISO-код может отображаться по-разному:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: "EUR"
}).format(100);
// €100.00
new Intl.NumberFormat("de-DE", {
style: "currency",
currency: "EUR"
}).format(100);
// 100,00 €
Позиция символа зависит от локали, а не от ISO-кода.
| Код | Валюта | Регион |
|---|---|---|
| USD | US Dollar | США |
| EUR | Euro | Еврозона |
| GBP | Pound Sterling | Великобритания |
| JPY | Japanese Yen | Япония |
| CNY | Chinese Yuan | Китай |
| KZT | Tenge | Казахстан |
| RUB | Russian Ruble | Россия |
Некоторые валюты требуют особого подхода:
new Intl.NumberFormat("ja-JP", {
style: "currency",
currency: "JPY"
}).format(5000);
// ¥5,000
Кувейтский динар имеет три знака после запятой:
new Intl.NumberFormat("en-KW", {
style: "currency",
currency: "KWD"
}).format(12.345);
// 12.345 KWD
Intl API учитывает это автоматически.
Внутри Intl.NumberFormat валюта влияет на несколько
аспектов форматирования:
ISO 4217 выступает как ключевой идентификатор, который связывает все эти параметры в единую модель форматирования.
Если локаль не поддерживает конкретную валюту, поведение остаётся корректным:
new Intl.NumberFormat("fr-FR", {
style: "currency",
currency: "USD"
}).format(100);
// 100,00 $US
Система использует запасные правила отображения.
Один и тот же ISO-код может давать разные результаты:
const value = 1234.56;
["en-US", "de-DE", "ja-JP"].forEach(locale => {
console.log(
new Intl.NumberFormat(locale, {
style: "currency",
currency: "EUR"
}).format(value)
);
});
Результат:
Различие определяется локалью, а не кодом валюты.
В реальных приложениях ISO 4217 используется как:
Пример структуры данных:
const price = {
amount: 1999.99,
currency: "USD"
};
Отображение:
new Intl.NumberFormat("en-US", {
style: "currency",
currency: price.currency
}).format(price.amount);
Использование ISO 4217 снижает риски:
Intl API полагается на этот стандарт как на источник истины при форматировании валютных значений.