Globalize построен поверх данных CLDR (Unicode Common Locale Data Repository), что определяет поведение форматирования чисел, включая целые значения. Форматирование целых чисел в этой системе опирается на правила локали: разделители групп разрядов, символы цифр, направление группировки и стандарты отображения отрицательных значений.
Целое число в контексте международного форматирования рассматривается как числовое значение без дробной части. Поведение форматирования задаётся через конфигурацию числового форматтера, который использует шаблоны CLDR.
Ключевой принцип заключается в том, что форматирование не изменяет само число, а трансформирует его строковое представление с учётом локали:
Форматирование осуществляется через
Globalize.numberFormatter.
Перед использованием форматирования требуется загрузка CLDR-данных и инициализация локали.
import Globalize from "globalize";
import cldrData from "cldr-data";
// загрузка необходимых частей CLDR
Globalize.load(
cldrData.entireSupplemental(),
cldrData.entireMainFor("ru", "en")
);
// установка локали
const ru = new Globalize("ru");
Набор данных CLDR определяет правила для конкретной локали, включая группировку разрядов и символы разделителей.
Форматирование целых чисел реализуется через отключение дробной
части. Основной параметр — maximumFractionDigits: 0.
const formatter = ru.numberFormatter({
maximumFractionDigits: 0
});
formatter(1234567);
Результат для локали ru:
1 234 567
Для локали en:
1,234,567
Различие определяется правилами группировки:
const ru = new Globalize("ru");
const fmt = ru.numberFormatter({ maximumFractionDigits: 0 });
fmt(1002003004);
Результат:
1 002 003 004
Группировка выполняется по три цифры справа налево.
const de = new Globalize("de");
const fmt = de.numberFormatter({ maximumFractionDigits: 0 });
fmt(1002003004);
Результат:
1.002.003.004
Используется точка как разделитель тысяч.
const en = new Globalize("en");
const fmt = en.numberFormatter({ maximumFractionDigits: 0 });
fmt(1002003004);
Результат:
1,002,003,004
Форматирование целых чисел может быть изменено через параметр
useGrouping.
const fmt = ru.numberFormatter({
maximumFractionDigits: 0,
useGrouping: false
});
fmt(1002003004);
Результат:
1002003004
Отключение группировки используется при:
Отрицательные значения обрабатываются через локализованный символ минуса.
const fmt = ru.numberFormatter({
maximumFractionDigits: 0
});
fmt(-123456);
Результат:
-123 456
В некоторых локалях возможны отличия символа минуса (например, U+2212 вместо ASCII дефиса).
Форматирование поддерживает выравнивание числа по разрядам через
параметр minimumIntegerDigits.
const fmt = ru.numberFormatter({
minimumIntegerDigits: 6,
maximumFractionDigits: 0
});
fmt(123);
Результат:
000123
Такой механизм используется для:
Целые числа могут форматироваться с одновременным применением нескольких ограничений.
const fmt = en.numberFormatter({
minimumIntegerDigits: 5,
useGrouping: true,
maximumFractionDigits: 0
});
fmt(42);
Результат:
00,042
Группировка применяется после дополнения ведущими нулями.
Для значений, превышающих стандартные диапазоны JavaScript Number,
форматирование сохраняет точность только в пределах безопасного
диапазона Number.MAX_SAFE_INTEGER.
const fmt = en.numberFormatter({
maximumFractionDigits: 0
});
fmt(9007199254740991);
Результат:
9,007,199,254,740,991
При выходе за пределы точного представления возможны потери точности, обусловленные спецификой IEEE 754.
Globalize использует CLDR для определения:
Пример различий группировки:
en: 1,234,567hi (хинди): 12,34,567const hi = new Globalize("hi");
const fmt = hi.numberFormatter({
maximumFractionDigits: 0
});
fmt(1234567);
Результат:
12,34,567
Нулевое значение форматируется согласно тем же правилам локали.
const fmt = ru.numberFormatter({
maximumFractionDigits: 0
});
fmt(0);
Результат:
0
При использовании minimumIntegerDigits ноль может быть
дополнен ведущими нулями:
000000
Модель Globalize функционально близка к
Intl.NumberFormat, однако отличается архитектурой:
Пример аналогичного поведения:
new Intl.NumberFormat("ru", {
maximumFractionDigits: 0
}).format(1234567);
Результат совпадает с Globalize:
1 234 567
Форматирование целых чисел применяется в:
Стабильность форматирования обеспечивается неизменностью CLDR-правил при одинаковой версии данных, что критично для серверных и распределённых систем отображения.