Форматтеры чисел

Globalize предоставляет слой международной локализации поверх данных CLDR (Unicode Common Locale Data Repository), благодаря чему форматирование чисел становится зависимым от культурных правил конкретной локали. Основная задача числовых форматтеров — преобразование внутренних числовых значений в строковое представление, соответствующее региональным соглашениям: разделители групп, десятичные символы, система округления, отображение знаков и другие нюансы.


Базовый принцип работы форматтеров чисел

Форматирование в Globalize строится вокруг трёх ключевых элементов:

  • локаль, определяющая правила представления чисел;
  • CLDR-данные, содержащие шаблоны форматирования;
  • форматтер, создаваемый для конкретного типа представления.

Перед использованием форматтеров требуется загрузка соответствующих данных CLDR: минимум числовых символов и правил форматирования.

После подготовки данных создаётся экземпляр форматтера, который компилирует правила один раз и далее применяется многократно, что снижает накладные расходы при массовом форматировании.


Форматирование обычных чисел

Основной метод работы с числами — formatNumber. Он преобразует числовое значение в строку согласно локали.

Типичный сценарий:

  • выбор локали (например, en, de, ru);
  • создание форматтера;
  • применение к числу.

Особенности локализации:

  • различие десятичного разделителя (. или ,);
  • группировка разрядов (запятая, пробел или апостроф);
  • правила округления;
  • отображение отрицательных чисел.

В разных локалях одно и то же число может выглядеть принципиально по-разному, что делает форматтер критически важным для интерфейсов.


Структура числовых шаблонов

В основе форматирования лежат шаблоны, описывающие:

  • минимальное и максимальное количество знаков после запятой;
  • обязательные цифры;
  • группировку разрядов;
  • поведение при округлении.

Пример логики шаблона:

  • 0 — обязательная цифра;
  • # — необязательная цифра;
  • , — разделитель групп;
  • . — десятичный разделитель.

Эти символы интерпретируются в соответствии с CLDR-правилами, что позволяет адаптировать форматирование под десятки языков без ручной настройки.


Управление точностью чисел

Одним из ключевых аспектов числовых форматтеров является контроль точности:

  • минимальное количество дробных знаков;
  • максимальное количество дробных знаков;
  • автоматическое округление.

При форматировании Globalize применяет правила округления, совместимые с международными стандартами, что позволяет избежать несогласованностей при отображении финансовых или статистических данных.

Особое значение имеет параметр максимального количества дробных знаков: он определяет, будет ли число сокращено или отображено полностью.


Форматирование процентов

Числовые форматтеры поддерживают преобразование значений в проценты. Логика заключается в масштабировании числа и добавлении соответствующего символа.

Особенности:

  • умножение исходного значения на 100;
  • добавление символа процента согласно локали;
  • соблюдение правил округления.

В разных регионах символ процента может иметь различные пробелы или позиции относительно числа, что учитывается CLDR.


Отображение больших чисел

При работе с крупными значениями применяется:

  • группировка разрядов;
  • использование локальных разделителей;
  • поддержка нестандартных систем группировки (например, индийская система: 1,23,45,678).

Globalize не ограничивается западной системой триадной группировки, так как CLDR содержит альтернативные схемы.

Это особенно важно для финансовых и аналитических интерфейсов, где корректность визуального представления критична.


Отрицательные числа и их представление

Форматтеры чисел обрабатывают отрицательные значения с учётом локальных соглашений:

  • стандартный знак минуса;
  • альтернативные символы отрицания;
  • возможное использование скобок вместо знака;
  • позиция знака относительно числа.

CLDR определяет несколько вариантов отображения отрицательных чисел, и Globalize выбирает соответствующий локали вариант автоматически.


Паттерны форматирования и их комбинации

В сложных сценариях используются комбинированные паттерны:

  • разные шаблоны для малых и больших чисел;
  • адаптивное форматирование в зависимости от диапазона значений;
  • специальные правила для нулевых значений.

Такие паттерны позволяют создавать гибкие системы отображения, где внешний вид числа зависит от его величины.


Форматирование чисел с учётом локали

Ключевое отличие Globalize от простых форматтеров — строгая зависимость от локали:

  • символы разделителей не фиксированы;
  • правила округления могут различаться;
  • группировка разрядов может изменяться;
  • формат отрицательных чисел локализован.

Каждая локаль представляет собой набор правил, а не просто язык интерфейса.


Повторное использование форматтеров

Форматтеры создаются один раз и используются многократно. Это важно для производительности:

  • исключается повторный разбор паттернов;
  • уменьшается нагрузка при массовом форматировании;
  • повышается предсказуемость поведения.

В высоконагруженных приложениях (дашборды, финансовые панели) это критический фактор оптимизации.


Интеграция с числовыми данными приложения

Форматтеры отделяют:

  • внутреннее числовое представление;
  • отображение для пользователя.

Это позволяет:

  • хранить данные в нормализованном виде;
  • менять локаль без изменения бизнес-логики;
  • унифицировать вывод чисел во всех компонентах интерфейса.

Такой подход исключает смешение логики данных и представления.


Поведение при некорректных данных

При передаче значений, не являющихся числами:

  • выполняется попытка приведения типа;
  • при невозможности возвращается исходное значение или ошибка форматирования (в зависимости от конфигурации);
  • сохраняется устойчивость работы приложения.

Это важно для обработки пользовательского ввода и внешних API.


Влияние CLDR на точность форматирования

CLDR определяет:

  • символы десятичного разделителя;
  • правила группировки;
  • шаблоны округления;
  • представление специальных чисел.

Globalize не реализует собственную систему локализации чисел, а полностью опирается на CLDR, что обеспечивает совместимость с международными стандартами Unicode.


Использование кастомных форматов

Помимо стандартных шаблонов допускается создание пользовательских форматов:

  • фиксированное количество знаков;
  • специализированное отображение (например, для научных значений);
  • бизнес-специфические правила форматирования.

Кастомные форматы позволяют адаптировать отображение чисел под предметную область без изменения исходных данных.


Ограничения и особенности поведения

При работе с числовыми форматтерами следует учитывать:

  • зависимость от загруженности CLDR-данных;
  • необходимость предварительной инициализации локали;
  • различие поведения между версиями CLDR;
  • чувствительность к точности входных данных.

Форматирование не является математической операцией, а представляет собой слой представления, зависящий от культурных правил.