Что делает этот конвертер
Инструмент превращает числовое значение в его словесную запись на английском языке. Доступны три варианта вывода: Слова (само число прописью), Валюта (денежная фраза с основной и разменной единицами — например, долларами и центами) и Check (стандартная строка банковского чека: сумма прописью плюс центы в виде числовой дроби со знаменателем 100). Запись ведётся по короткой шкале (short scale), где миллиард — это \(10^9\), а триллион — \(10^{12}\); именно эта система принята во всём англоязычном мире и отличается от привычной части европейских стран. Названия валют зависят от страны, но базовые правила написания везут одинаковы.
Как пользоваться
Введите число в первое поле. Можно использовать десятичную точку, знак минус и разделители тысяч. Выберите нужный формат вывода. Для режима Currency укажите валюту; для режима Check — название валюты, которое печатается на чеке, и при желании завершающее слово (exactly или only). Наконец, выберите регистр букв: строчные, ЗАГЛАВНЫЕ, Каждое Слово С Большой или Как в предложении. Результат пересчитывается автоматически, а выбранный регистр применяется к готовой строке в последнюю очередь.
Как устроена логика
Целая часть разбивается на трёхзначные группы справа налево. Каждая группа проговаривается как сотни, затем десятки (через дефис с единицами, например twenty-one), затем добавляется слово разряда (thousand, million, billion и т. д.).
$$N=\sum_{i=0}^{k} g_i\cdot 1000^{i}\;\Rightarrow\;\text{join}(\text{group}_i + \text{scale}_i)$$
$$\text{words} = \text{intToWords}(\text{integer}) \; [+\; \text{"point"} + \text{digits}]$$
Внутри чистого числа союз «and» не вставляется — так принято в американском английском. В режиме Words цифры после десятичной точки читаются по одной после слова «point», с сохранением ведущих нулей: так .05 превращается в «point zero five». В режимах Currency и Check значение округляется до целых центов, чтобы избежать погрешностей вычислений с плавающей точкой.
$$\text{cents}=\operatorname{round}(x\times 100),\;\text{whole}=\lfloor \text{cents}/100\rfloor,\;\text{minor}=\text{cents}\bmod 100$$
Разбор примера
Введите 1234.05 в режиме Currency с долларами и регистром Title Case. Целая часть 1234 запишется как «one thousand two hundred thirty-four», центы (5) — как «five», и в итоге получится «one thousand two hundred thirty-four dollars and five cents». После применения Title Case выйдет «One Thousand Two Hundred Thirty-Four Dollars And Five Cents».
Частые вопросы
Почему в числе нет союза «and»? В американском английском «and» внутри целого числа опускается — этот союз лишь разделяет основную и разменную денежные части.
Как обрабатываются валюты без центов? У иены, юаня, воны и донга нет разменной единицы, поэтому после округления прописью записывается только целая сумма.
Что будет при пустом поле? Пустое поле считается нулём и возвращает «zero».