Перетворення чисел до великої формі

При розробці різних додатків, особливо пов'язаних з бухгалтерськими та економічними завданнями, досить часто виникає задача представлення числа в формі прописи. Наприклад, число «255» прописом буде виглядати як «Двісті п'ятдесят п'ять».

В інтернеті є безліч вільно розповсюджуваних реалізацій для різних мов програмування. Всі ці реалізації представлені переважно у вигляді шматків вихідного коду, які необхідно адаптувати під свої цілі.

Хотілося б мати бібліотеку для .NET, в якій були б реалізовані дані функції, і підключати її при необхідності в різних проектах.

Загальні моменти реалізації

Для вирішення даного завдання в бібліотеці TsSoft.Orthography розроблений інтерфейс INumberToWordConverter і дві його реалізації - російськомовна і англомовна, що дозволяють перетворювати числа до запису літерами російською та англійською мовою.

Інтерфейс INumberToWordConverter містить наступні методи:

Перетворення числа, що містить суму у валюті (в залежності від реалізації інтерфейсу), в прописну форму:

Теж саме, але в заданому відмінку (тільки для української мови):

Для створення конвертера необхідно скористатися класом NumbersToWordsConverterFactory, в якому реалізовані 3 методу:

1. Створює інтерфейс для перетворення числа в суму прописом для зазначеної культури. Якщо культура не вказана, то вона береться з системних налаштувань. Якщо культура не підтримується, то метод згенерувати виключення з повідомленням «Not supported culture».

2. Створює інтерфейс для перетворення числа в суму прописом для української мови.

3. Створює інтерфейс для перетворення числа в суму прописом для англійської мови.

Реалізація для української мови

На відміну від більшості реалізацій, які можна знайти в інтернеті, в даній бібліотеці передбачено отримання суми прописом для різних відмінків української мови.

Заради справедливості слід зауважити, що є досить потужні комерційні бібліотеки, в яких це теж реалізовано, наприклад morpher.

Називний відмінок для перетворення суми використовується, мабуть, найчастіше. Саме в називному відмінку пишуться суми прописом в різних підсумкових звітах, рахунках-фактурах і т.д.

В результаті виконання цього коду на екрані з'явиться повідомлення: «сто рублів 05 копійок».

Давальний для написання сум прописом застосовується рідше, ніж називний, але все ж буває необхідний. Наприклад, якщо в документі необхідно відобразити фразу «витрати, в порівнянні з минулим періодом зросли і стали рівними ста рублям 05 копійкам».

В результаті виконання цього коду на екрані з'явиться повідомлення: «ста рублям 05 копійкам».

Аналогічним чином можна перетворити число в суму прописом для родового ( «кого»? «Чого»?), Знахідного ( «кого»? «Що»?), Орудного ( «ким»? «Чому»?), Прийменникового ( «про кого "? "про що"?).

Реалізація для англійської мови

В результаті виконання цього коду на екрані з'явиться повідомлення: «one hundred dollars and 05 cents».

Про бібліотеку

Бібліотека TsSoft.Orthography замислювалася як набір інтерфейсів і класів, призначений для допомоги при роботі з конструкціями розмовної мови. На поточному етапі в бібліотеці реалізовані функції перетворення числа до великої формі російською та англійською мовами. Надалі бібліотека буде вдосконалюватися і додаватися нові класи.

Код можна подивитися на GitHub. а для отримання бібліотеки використовуйте NuGet пакет.