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
misiek172
post
Post #2





Grupa: Zarejestrowani
Postów: 656
Pomógł: 3
Dołączył: 26.10.2005
Skąd: Częstochowa

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


jeszczze mozna dołożyć opcje, aby działało pod kodowaniem iso, czyli:

  1. <?php
  2. $x = array('ś', 'ą', 'Ś');
  3. $x_za = array('&para;', '&plusmn;', '&brvbar;');
  4. for($i=0;$i<count($x);$i++){
  5. $slownie = str_replace($x[$i], $x_za[$i], $slownie);
  6. }
  7. ?>


//zamiast &para &plusmnb &brvbar powinno być inne znaczki lecz skrypt na forum zamienia je na te teksty... powinno być według położena w tablicy ANSI characeter: 182(B6), 177(B1), 166(A6)

Ten post edytował misiek172 7.02.2007, 20:05:25
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: 24.12.2025 - 15:04