Компактная нотация в Intl.NumberFormat предназначена для
сокращённого представления больших чисел с использованием локализованных
префиксов и суффиксов. Она применяется в интерфейсах, где важна экономия
пространства: статистика, аналитические панели, финансовые дашборды,
социальные метрики.
Основной принцип заключается в замене длинной числовой записи на
краткую форму с масштабным обозначением. Вместо 1 000
отображается 1K, вместо 1 000 000 —
1M, при этом конкретный формат зависит от выбранной
локали.
Компактная нотация включается через параметр
notation: "compact".
const formatter = new Intl.NumberFormat("en-US", {
notation: "compact"
});
formatter.format(1200); // "1.2K"
formatter.format(1500000); // "1.5M"
formatter.format(980); // "980"
В этом режиме происходит автоматическое масштабирование числа по степеням тысячи. Значения округляются до удобочитаемого вида.
Компактная нотация строго зависит от локали, так как обозначения масштабов различаются между языками и регионами.
const en = new Intl.NumberFormat("en-US", { notation: "compact" });
const ru = new Intl.NumberFormat("ru-RU", { notation: "compact" });
en.format(1500000); // "1.5M"
ru.format(1500000); // "1,5 млн"
Разница проявляется не только в суффиксах, но и в форматировании десятичного разделителя, пробелов и правил округления.
Параметр compactDisplay управляет тем, насколько
агрессивно происходит сокращение чисел.
Доступны два значения:
"short" — короткие обозначения (по умолчанию)"long" — полные словесные формыconst shortFormatter = new Intl.NumberFormat("en-US", {
notation: "compact",
compactDisplay: "short"
});
shortFormatter.format(1200000); // "1.2M"
const longFormatter = new Intl.NumberFormat("en-US", {
notation: "compact",
compactDisplay: "long"
});
longFormatter.format(1200000); // "1.2 million"
Длинная форма используется в интерфейсах, где важна читаемость и снижение двусмысленности, особенно в многоязычных системах.
Компактная нотация автоматически выбирает порядок величины числа:
При этом используется округление, управляемое стандартными правилами
Intl.NumberFormat.
const f = new Intl.NumberFormat("en-US", {
notation: "compact",
maximumFractionDigits: 1
});
f.format(1250); // "1.3K"
f.format(1999000); // "2M"
Округление может приводить к переходу в следующую категорию масштаба, если значение достигает порогового уровня.
Числа, не достигшие тысячного порога, не сокращаются.
const formatter = new Intl.NumberFormat("en-US", {
notation: "compact"
});
formatter.format(999); // "999"
Это важно для сохранения точности восприятия данных в диапазоне малых значений.
Компактная нотация работает совместно с другими параметрами
Intl.NumberFormat, включая стиль, знаки, валюту и
процентные значения.
const currencyFormatter = new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
notation: "compact"
});
currencyFormatter.format(2500000); // "$2.5M"
Валютный символ сохраняется, а числовая часть сокращается.
const percentFormatter = new Intl.NumberFormat("en-US", {
style: "percent",
notation: "compact"
});
percentFormatter.format(0.25); // "25%"
В случае процентов компактная нотация чаще всего не влияет на отображение малых значений, так как диапазон ограничен.
Компактные обозначения не являются универсальными символами. Они зависят от языковых правил и культурных соглашений.
Примеры различий:
K, M, Bтыс., млн, млрдЭто означает, что одинаковое число может визуально существенно отличаться при смене локали, даже если его значение остаётся неизменным.
Компактная нотация применяется для повышения информационной плотности интерфейса без потери интерпретируемости. Основные сценарии использования:
При этом важно учитывать, что чрезмерное сокращение может скрывать точные значения, особенно при сравнении близких чисел.
Intl.NumberFormat с компактной нотацией использует
встроенные механизмы движка JavaScript и ICU-библиотеки. Это
обеспечивает:
Создание экземпляра форматтера дорогостоящей операцией считается относительно, поэтому повторное использование одного объекта предпочтительнее, чем создание нового для каждого вызова.
const formatter = new Intl.NumberFormat("en-US", {
notation: "compact"
});
// повторное использование
formatter.format(1000);
formatter.format(2000);
formatter.format(3000);
Компактная нотация не предназначена для:
Она ориентирована на визуальное представление агрегированных данных, где допустимо округление и сокращение масштаба.