Сумма прописью: по-русски и на Java

Потребовалось преобразовать в программе на Java денежные величины, выраженные десятичным письмом, в русские слова, причем в соответствии с бухгалтерскими правилами. Подумал, что поиск готового решения и его адаптация к моему проекту займет примерно столько же времени, сколько и самостоятельная реализация. Да и сама задача показалась интересной, захотелось сделать что-нибудь быстрое и законченное. В итоге за пару часов родилось вот это (см. под катом). Пока преобразуются числа до миллиона, т.к. суммы в моей программе задействованы небольшие. Дело в том, что при преобразовании большого числа с плавающей точкой в строку может появиться форма записи типа 2.977E2. Парсить ее не захотелось, и без того в этой задаче специфики хватает.

Да, русский язык, все-таки, плохо подлежит алгоритмизации. Такие вещи, как «одна тысяЧА», но «две тысяЧИ», «пять тысяЧ»; или, скажем «триСТА», но «пятьСОТ»; или «двадЦАТЬ», но «сорок(!)» и «девяноСТО»; или «двЕ тысячи», но «двА миллиона» — со всем этим пришлось изрядно повозиться.

И еще: как, все-таки, хорошо, что в современных версиях Java можно использовать национальные алфавиты без дополнительных телодвижений.

( Читать дальше )