Zamiana liczby na słowa z polską gramatyką C#

Często podczas pracy firmach finansowych przychodzi czas na typowe zadanie zamiany liczby z postaci cyfrowej na postać liczbową w języku polskim. Szukałem w internecie gotowej implementacji takiego algorytmu, sprawdzonego i przetestowanego z otwartymi kodami i… okazało się, że nic nie znalazłem do C#.

Nie było nigdzie implementacji takiego konwertera w .NET dlatego poniżej zrobiłem własną implementację.

Poniżej warunki takiego konwertera:

  • Zamiana liczby na słowa zawiera polskie odmiany np: tysiące, tysięcy, tysiąc. (w tej chwili do zakresu integera czyli  do około 2 miliardów)
  • Kody są dostępne na licencji MIT czyli można dowolnie je zmieniać i modyfikować.
  • Projekt zawiera bibliotekę LiczbyNaSlowaNet ze statyczną klasą NumberToTexConverter z metodą Convert oraz sporo testów do niej.
  • Biblioteka będzie rozwijana przez najbliższe 3 miesiące lub gdy zostanie zauważony błąd.
  • Kody źródłowe są otwarte i są dostępne tutaj

https://github.com/przemekwa/LiczbyNaSlowaNET.git

  • Szczegóły algorytmu są dostępne tutaj:

http://www.algorytm.org/inne/zamiana-liczby-na-slowa-z-polska-gramatyka.html#impl1008

  • Plany rozwoju dotyczą głownie spraw finansowych(możliwość konwersji do postaci walutowej, możliwość konwersji większego zakresu liczb, możliwość konwersji liczb z przecinkiem np: 12,4)

[UPDATE 21.12.2014]

Wprowadzone zmiany:

  • Konwersja liczb z przecinkiem
  • Konwersja na postać walutową (dwa zlote trzy grosze)

Będę wdzięczny za informację zwrotną. Obiecuje, że każdą potraktuje poważnie i się do niej odniosę.

[UPDATE 01.03.2015]

Wprowadzone zmiany:

Install-Package LiczbyNaSlowaNET.dll

[UPDATE 02.03.2015]

  • Poprawki 2 błędów dotyczących zamiany liczb na słowa.

Jeśli masz jakieś uwagi do projektu, proszę zgłoś je na github-ie. Tam jest całkiem dobre narzędzie do zgłaszania problemów do projektu.

[UPDATE 29.07.2016]

  • możliwość ustawiania dowolnej waluty, podczas konwersji liczby na odpowiednik walutowy (ta funkcjonalność powstała dzięki wsparciu społeczności w szczególności użytkownika Tomasz Sienkiewicz).
  • Jeszcze nie wydałem nowej wersji ale będzie ona wkrótce dostępna na nugetach

[UPDATE 3.01.2017]

Wersja 1.0.0.4 – – wersja w nugetach 1.0.4

  • usunięcie kontenera DI.
  • biblioteka już nie potrzebuje zależności innych niż .NET 4.0
  • możliwość ustawiania czy tekst ma posadać polskie znaki czy też nie. Domyślnie jest bez polskich znaków.
  • możliwość podmienienia słowników zawierających liczebniki.
  • dodanie obsługi wartości procentowych

 

[UPDATE 4.01.2017]

Wersja 1.0.0.5 – wersja w nugetach 1.0.5

Dzięki wsparciu https://github.com/ZmorzynskiK biblioteka dorobiła się kolejne wersji i sporo przydatnych zmian w kodzie

Najważniejsze zmiany:

  • dodanie pomocniczych metod do NumberToText
  • przejście z int na long (potencjalnie większy zakres)
  • usunięcie kilku klas (np NumberToTextOptionBuilder), w ich miejsce inne wywołania
  • zmiany w architekturze klasy CurrencyAlgorithm
  • uproszczenie interfejsów
  • wspólna bazowa klasa BaseCurrencyDeflation
  • dostosowanie słowników-deflacji do zmienionego interfejsu ICurrencyDeflation

8 przemyśleń nt. „Zamiana liczby na słowa z polską gramatyką C#

  1. Jeszcze co do testów.
    Lepszą praktyką jest jedna asercja – jedna metoda.

    1. Hej, dzieki za komentarz. Masz na myśli, ze jeden test na jedną liczbe. Ok mysle, ze to sensowne. Poprawię wieczorem

  2. Strasznie razi mnie polska nomenklatura w języku programowania.
    W sumie kiedyś na potrzeby w firmie też napisałem taki konwerter. Z racji komercyjnego bytu, podzielić się nie mogę :)

    1. Mam fetysz jeśli chodzi o polską nomenklature. Bardzo lubię również polskie znaki w nazwach zmiennych i metod, visual studio to dobrze wspiera. Ale myślę, że jeśli to ma być projekt dla społeczności to poprawię polskie nazwy na angielskie. Dzięki za zwrócenie uwagi.

      1. Niestety nie w pełni. Polskie znaki uniemożliwiają generowanie diagramów UML obiektów zawierających właśnie polskie znaki. Dotyczy to również samej ścieżki do tychże plików.

        1. A to nie wiedziałem. Dzięki za informacje kolego. W takim razie następnym razem się mocno zastanowię przed używaniem polskich znaków.

Możliwość komentowania jest wyłączona.