MoneyToWords — надёжная библиотека на F#, преобразующая числа в текст с правильным склонением:
- "один рубль",
- "двадцать одна тысяча",
- "сто двадцать три миллиона".
💡 Этот проект создан для изучения F#, принципов функционального программирования, механизмов GitHub и паттернов проектирования. Выполнен по принципам production-ready кода:
- полное тестирование,
- чистая архитектура,
- документация
- готовность к использованию в реальных системах.
Подходит для:
- Формирования банковских документов
- Чеков и счётов
- Финансовых отчётов
- Генерации суммы прописью в печатных формах
- ✅ Поддержка чисел до триллионов
- 🇷🇺 Правильное склонение:
рубль,рубля,рублей - 🔤 Женский род для тысяч:
одна тысяча,двадцать одна тысяча - 🧪 100% покрытие тестами
- 🧩 Легко расширить для других языков
- 📦 Готова к использованию как NuGet-пакет
open MoneyToWords
open MoneyToWords.Presentation
match Money.TryCreate(1L, 0) with
| Ok money -> printfn "%s" (MoneyToWords.toWords money)
| Error err -> printfn "Ошибка: %s" err.Description
match Money.TryCreate(112_234L, 75) with
| Ok money -> printfn "%s" (MoneyToWords.toWords money) // → "сто двенадцать тысяч двести тридцать четыре рубля и семьдесят пять копеек"
| Error _ -> () open MoneyToWords
let result = toWords 42_000L 50L
match result with
| Ok text -> printfn "Сумма: %s" text
| Error msg -> printfn "Ошибка: %s" msgЧисло разбивается на группы по 3 цифры (тысячи, миллионы и т.д.), каждая обрабатывается отдельно:
123 456 789
| | └─ 789 → "семьсот восемьдесят девять"
| └───── 456 → "четыреста пятьдесят шесть тысяч"
└───────── 123 → "сто двадцать три миллиона"
Для каждой группы:
- Используются правильные формы: тысяча, тысячи, тысяч
- Учитываются особые случаи: одна тысяча, две тысячи
- Правильное склонение чисел: пятнадцать, а не пятьнадцать
Проект полностью покрыт тестами:
Юнит-тесты — все граничные случаи:
-
0, 1, 2, 5
-
11–19
-
21, 22, 25 — правильное окончание
-
100, 1000, 999_999_999_999_999
-
Свойства (FsCheck) — проверка на тысячах случайных значений:
-
Склонение по последней цифре
-
Исключения для 11–14
-
Поддержка больших чисел
Все тесты проходят на CI при каждом коммите.
dotnet add package MoneyToWordsFSharpLib dotnet build
dotnet testПроект использует:
- F# .NET 10 LTS
- xUnit, FsCheck, Unquote
MIT — свободно используй в любых проектах, коммерческих и открытых.
- 🐞 Нашёл баг? → Сообщи об ошибке
- 💡 Есть идея? → Предложи фичу
- ❓ Вопрос? → Задай вопрос
- 🤝 Вклад? → Создай PR
✅ Стабильная версия: v1.1.0
✅ CI/CD:
✅ NuGet:
Спасибо, что используешь этот проект!
Если он помог — поставь ⭐ — это вдохновляет на развитие.