Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: KwotaSlownie.pl - Zamiana kwoty na postać słowną
Forum PHP.pl > Inne > Oceny
Reptile ReX
Biblioteka Kwota Słownie
Kwota słownie jest projektem wciąż rozwijanej biblioteki napisanej w języku PHP 5 służącej do konwertowania kwoty z postaci liczbowej na postać słowną, uwzględniając poprawność językową oraz prawidłową odmianę w języku polskim.

Biblioteka dzięki swojej uniwersalności sama dostosowuje się pod użytkowników, użytkownik może sam zdecydować jaką walutę chcę wyświetlać, oraz w jakim formacie prezentować kwotę zdawkową czyli np. grosze ? czy w postaci słownej tak jak kwota podstawowa, czy być może jako liczba w postaci: 10/100, 20/100 itd.

Jeżeli szukasz rozwiązania dla swojej firmy lub jesteś programistą, który poszukuję rozwiązania, które pozwoli na wyświetlanie na fakturach kwoty słownej, to dobrze trafiłeś, nie czekaj ani chwili dłużej.

Do pobrania oraz więcej informacji na:
http://www.kwotaslownie.pl
jwest
Uważam, że jest to nieźle napisany skrypt, ale myślę, że trochę przeceniasz jego właściwości wink.gif Wrzuć go na github-a i zunifikuj działanie najlepiej również dla różnych języków. A jeżeli faktycznie chcesz zrobić coś innego, to może zamknij źródła (czego nie jestem zwolennikiem!) i zrób webservice np. w SOAP, JSON i udostępnij programistom sam interfejs wejścia/wyjścia.
vokiel
Bardzo w porządku, czytelnie, schludnie, ok. Pewnie poza pochwałami chcesz też usłyszeć co można by poprawić. Chociaż, może nie chcesz, ale i tak napiszę ;-)

  1. Switch-case zamiast rozbudowanych bloków if-elseif
  2. Wersja chyba nie powinna być możliwa do edycji?
  3. Phpdoc - nagłówkiem każdej metody jest: 'Metoda nazwa();', co nie dość, że jest niepotrzebne to jeszcze przy tym trochę utrudnia. Po pierwsze, komentarz jest do danej metody - czyli jej nazwę już znamy, po drugie pierwsza linia podpowiedzi, która jest najważniejsza zawiera nazwę metody, która przy pisaniu kodu nie jest nam potrzebna. Często też IDE przy zwinięciu bloku komentarza pokazują pierwszy jego wiersz, wtedy tutaj mamy 2 razy to samo.
  4. Rozdzielanie bloków komentarzem //-------, aż tak to zwiększa czytelność?
  5. Niepotrzebne zwracanie 'return true;' w miejscach gdzie nie ma to kompletnie znaczenia. Także w przypadkach, gdzie metoda nie ma możliwości zwrócenia innego wyniku (false lub wartości).
Pawel_W
niektóre fragmenty można by było krócej napisać, np.
  1. $iPrice = number_format($iPrice, 2, '.', '');
  2. if($iPrice >= 1000000000000 || $iPrice <= -1000000000000){
  3. return '';
  4. }
  5. if($iPrice < 0){
  6. $this->aOutput[] = 'minus';
  7. $iPrice = $iPrice*-1;
  8. $iPrice = number_format($iPrice, 2, '.', '');
  9. }

zamienić na
  1. if($iPrice < 0){
  2. $this->aOutput[] = 'minus';
  3. $iPrice = $iPrice*-1;
  4. }
  5. $iPrice = number_format($iPrice, 2, '.', '');
  6. if($iPrice >= 1000000000000){
  7. return '';
  8. }

smile.gif
darko
Zakładając, że skrypt poprawnie konwertuje wszystkie liczby (nie testowałem) to kilka kwestii można byłoby poprawić:
- settery (setCasualMode i setCurrency) mogłyby / powinny działać na zasadzie chaining'u (set coś_tam return $this)
- rozumiem, że stosujesz hermetyzację, ale metod prywatnych nie można nadpisać, lepiej byłoby ustawić im modyfikator dostępu na protected
- dopracuj stosowanie się do reguł phpDoc (krócej i po angielsku, bardziej konkretnie zamiast pełnego wypracowania przed każdą metodą)
- nie mieszaj nazw zmiennych angielskich z polskimi, najlepiej używać tylko angielskiego
- jest taka niepisana zasada, że nazwy pól prywatnych zaczynają się od znaku podkreślenia
- rozumiem, że Twój algorytm pracuje na liczbach z zakresu od -1000000000000 do 1000000000000 - nic nie wspominasz o tym ograniczeniu w komentarzu do metody, pewnie info znajdę w dokumentacji
I na koniec muszę pochwalić, podkreślam, że nie testowałem poprawności konwersji, że ktoś wreszcie uporządkował i napisał fajne narzędzie. Myślę, że przyda się.
!*!
Cytat(na wejściu)
2.000 lub 2,000


Cytat(wynik)
Podana kwota, wyrażona słownie to: dwa złote zero groszy


coś chyba nie tak.

Cytat
Podana przez Ciebie opcja/wartość jest nieprawidłowa, lub wartość wykracza poza maksimum !
Posio
Przetestowane, bardzo mi pomogło. Jeśli chodzi o ogólną ocenę to po prostu CHODZI DOBRZE smile.gif
reptilerex
@!*!

Odpowiedź:
Kwota: 2,000
To dwa złote z trzema miejscami po przecinku.
Kwotę należy podać w normalnej notacji czyli przykładowo: 2000.00.

W programowaniu operujemy na takich formatach liczb, a nie z liczbą z number_format z thousand separatorem.
Te drugie uzywamy do prezentacji wink.gif


Co do zmian to w nastepnej wersji dodam:
* Method chaining
* Zmienię modyfikatory dostępu metod prywatnych na protected.
* Dodam "_" w nazwach właściwości prywatnych

Dzięki za te podpowiedzi.
A co do switchów to kiedyś przeczytałem (http://www.phpbench.com), że konstrukcja if / elseif jest "mikro minimalnie" szybsza niż switch / case, dlatego jej używam częściej, taki mój celowy zabieg wink.gif

Co do moich komentarzy to po prostu tak piszę i raczej się nie oduczę.
Wolę mieć też dłuższy komentarz, bo z mojego doświadczenia wiem, że bardzo łatwo można zapomnieć jak funkcjonuje dany mechanizm
Komenatrze pomagają mi się w tym odnaleźć i nie zamierzam zmieniać ich stylu pisania, aczkolwiek dzieki za rady smile.gif
darko
Cytat(reptilerex @ 17.08.2012, 15:05:44 ) *
@!*!

Odpowiedź:
Kwota: 2,000
To dwa złote z trzema miejscami po przecinku.
Kwotę należy podać w normalnej notacji czyli przykładowo: 2000.00.

W programowaniu operujemy na takich formatach liczb, a nie z liczbą z number_format z thousand separatorem.
Te drugie uzywamy do prezentacji wink.gif

~Reptile ReX - jest Was dwóch czy po prostu masz multikonto i wpadłeś? snitch.gif
reptilerex
"Jest mnie jeden".

Kiedyś był (nie wiem czy jest nadal) quiz na php.pl
Chciałem go rozwiązać ponownie, aby zobaczyć jakie są inne pytania i zarejestrowałem wtedy drugie konto.
I teraz mi się ciągle mylą, jeżeli konieczne jest posiadanie tylko jednego to chciałbym zachować to pierwsze "Reptile ReX" ;D
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.