Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kwota słownie - gotowy skrypt, z prośbą o przetestowanie (obsługuje 1-10 do potęgi 45)
ROMeeO
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 29.06.2006

Ostrzeżenie: (0%)
-----


Napisałem sobie funkcyjkę do obsługi dowolnej kwoty. Ta akurat obsługuje aż do septyliardów, czyli 10 do potęgi 45, ale można ją rozwinąć dowolnie.
Jakby ktoś chciał potestować, to bardzo proszę.
Kwotę zwraca w formacie:
1234,56 - jeden tysiąc dwieście trzydzieści cztery złote 56/100 gr.
grosze oczywiście można jeszcze dorobić słownie, ale mi akurat w takim formacie było potrzebne.
  1. <?php
  2. function slownie ($kw) {
  3.  
  4. $t_a = array('','sto','dwieście','trzysta','czterysta','pięćset','sześćset','siedemset','osiemset','dziewięćset');
  5. $t_b = array('','dziesięć','dwadzieścia','trzydzieści','czterdzieści','pięćdziesiąt','sześćdziesiąt','siedemdziesiąt','osiemdziesiąt','dziewięćdziesiąt');
  6. $t_c = array('','jeden','dwa','trzy','cztery','pięć','sześć','siedem','osiem','dziewięć');
  7. $t_d = array('dziesięć','jedenaście','dwanaście','trzynaście','czternaście','piętnaście','szesnaście','siednaście','osiemnaście','dziewiętnaście');
  8.  
  9. $t_kw_15 = array('septyliard','septyliardów','septyliardy');
  10. $t_kw_14 = array('septylion','septylionów','septyliony');
  11. $t_kw_13 = array('sekstyliard','sekstyliardów','sekstyliardy');
  12. $t_kw_12 = array('sekstylion','sekstylionów','sepstyliony');
  13. $t_kw_11 = array('kwintyliard','kwintyliardów','kwintyliardy');
  14. $t_kw_10 = array('kwintylion','kwintylionów','kwintyliony');
  15. $t_kw_9 = array('kwadryliard','kwadryliardów','kwaryliardy');
  16. $t_kw_8 = array('kwadrylion','kwadrylionów','kwadryliony');
  17. $t_kw_7 = array('tryliard','tryliardów','tryliardy');
  18. $t_kw_6 = array('trylion','trylionów','tryliony');
  19. $t_kw_5 = array('biliard','biliardów','biliardy');
  20. $t_kw_4 = array('bilion','bilionów','bilony');
  21. $t_kw_3 = array('miliard','miliardów','miliardy');
  22. $t_kw_2 = array('milion','milionów','miliony');
  23. $t_kw_1 = array('tysiąc','tysięcy','tysiące');
  24. $t_kw_0 = array('złoty','złotych','złote');
  25.  
  26. if ($kw!='') {
  27. $kw=(substr_count($kw,',')==0) ? $kw.',00':$kw;
  28. $tmp=explode(",",$kw);
  29. $ln=strlen($tmp[0]);
  30. $tmp_a=($ln%3==0) ? (floor($ln/3)*3):((floor($ln/3)+1)*3);
  31. for($i = $ln; $i < $tmp_a; $i++) {
  32. $l_pad .= '0';
  33. $kw_w = $l_pad . $tmp[0];
  34. }
  35. $kw_w=($kw_w=='') ? $tmp[0]:$kw_w;
  36. $paczki=(strlen($kw_w)/3)-1;
  37. $p_tmp=$paczki;
  38. for($i=0;$i<=$paczki;$i++) {
  39. $t_tmp='t_kw_'.$p_tmp;
  40. $p_tmp--;
  41. $p_kw=substr($kw_w,($i*3),3);
  42. $kw_w_s=($p_kw{1}!=1) ? $t_a[$p_kw{0}].' '.$t_b[$p_kw{1}].' '.$t_c[$p_kw{2}]:$t_a[$p_kw{0}].' '.$t_d[$p_kw{2}];
  43. if(($p_kw{0}==0)&&($p_kw{2}==1)&&($p_kw{1}<1)) $ka=${$t_tmp}[0]; //możliwe że $p_kw{1}!=1
  44. else if (($p_kw{2}>&& $p_kw{2}<5)&&$p_kw{1}!=1) $ka=${$t_tmp}[2];
  45. else $ka=${$t_tmp}[1];
  46. $kw_slow.=$kw_w_s.' '.$ka.' ';
  47. }
  48. }
  49. $text = $kw_slow.' '.$tmp[1].'/100 gr.';
  50. return $text;
  51. }
  52.  
  53. echo slownie('12345678910111213141516171819202122232425262728,56');
  54. ?>


Pozdrawiam

Ten post edytował ROMeeO 29.06.2006, 22:14:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kicaj
post
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


1234,56
jeden tysiąc dwieście trzydzieści cztery złote 56/100 gr.
# jeden tysiac brzydko brzmi, ale musi byc:p
# 56/100 gr. dlaczego w ten sposob?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

2,00
dwa złote 00/100 gr.
# wyeliminowac grosze w takim przypadku

12,42
dwanaście złotych 42/100 gr.
#ok

54434,433
pięćdziesiąt cztery tysiące czterysta trzydzieści cztery złote 433/100 gr.
# przyklad z ciekawosci

545,11
pięćset czterdzieści pięć złotych 11/100 gr.
# ok

1111,11
jeden tysiąc sto jedenaście złotych 11/100 gr.
# podobnie jak w 1. przykładzie
# nie wiem czy dopuszczalne byloby: tysiac sto jedensacie zlotych

1,01
jeden złoty 01/100 gr.
# ok

0,25
złotych 25/100 gr.
# sypie sie przy 0zl
# proponuje: zero złotych, 25 gr. lub poprostu: 25 gr

0,00
złotych 00/100 gr.
# jw.

Ogolnie poprawnie sie zachowuje, grosze takze moglby byc "pisane" (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Na poczatku zdefiniuj zmienne $l_pad i $kw_slow bo wyskakuja Notice.
Jednak popracowalbym nad kodem, nazwenictwem zmiennych oraz czytelnosc lezy...

Ten post edytował kicaj 29.06.2006, 22:33:06
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 26.12.2025 - 17:07