Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]kwota słownie - błąd
Forum PHP.pl > Forum > Przedszkole
krzesik
witam, mam poniższy kod:
  1. function slownie ($kw) {
  2.  
  3. $t_a = array('','sto','dwieście','trzysta','czterysta','pięćset','sześćset','siedemset','osiemset','dziewięćset');
  4. $t_b = array('','dziesięć','dwadzieścia','trzydzieści','czterdzieści','pięćdziesiąt','sześćdziesiąt','siedemdziesiąt','osiemdziesiąt','dziewięćdziesiąt');
  5. $t_c = array('','jeden','dwa','trzy','cztery','pięć','sześć','siedem','osiem','dziewięć');
  6. $t_d = array('dziesięć','jedenaście','dwanaście','trzynaście','czternaście','piętnaście','szesnaście','siednaście','osiemnaście','dziewiętnaście');
  7.  
  8. $t_kw_15 = array('septyliard','septyliardów','septyliardy');
  9. $t_kw_14 = array('septylion','septylionów','septyliony');
  10. $t_kw_13 = array('sekstyliard','sekstyliardów','sekstyliardy');
  11. $t_kw_12 = array('sekstylion','sekstylionów','sepstyliony');
  12. $t_kw_11 = array('kwintyliard','kwintyliardów','kwintyliardy');
  13. $t_kw_10 = array('kwintylion','kwintylionów','kwintyliony');
  14. $t_kw_9 = array('kwadryliard','kwadryliardów','kwaryliardy');
  15. $t_kw_8 = array('kwadrylion','kwadrylionów','kwadryliony');
  16. $t_kw_7 = array('tryliard','tryliardów','tryliardy');
  17. $t_kw_6 = array('trylion','trylionów','tryliony');
  18. $t_kw_5 = array('biliard','biliardów','biliardy');
  19. $t_kw_4 = array('bilion','bilionów','bilony');
  20. $t_kw_3 = array('miliard','miliardów','miliardy');
  21. $t_kw_2 = array('milion','milionów','miliony');
  22. $t_kw_1 = array('tysiąc','tysięcy','tysiące');
  23. $t_kw_0 = array('złoty','złotych','złote');
  24.  
  25. if ($kw!='') {
  26. $kw=(substr_count($kw,'.')==0) ? $kw.'.00':$kw;
  27. $tmp=explode(".",$kw);
  28. $ln=strlen($tmp[0]);
  29. $tmp_a=($ln%3==0) ? (floor($ln/3)*3):((floor($ln/3)+1)*3);
  30. for($i = $ln; $i < $tmp_a; $i++) {
  31. $l_pad .= '0';
  32. $kw_w = $l_pad . $tmp[0];
  33. }
  34. $kw_w=($kw_w=='') ? $tmp[0]:$kw_w;
  35. $paczki=(strlen($kw_w)/3)-1;
  36. $p_tmp=$paczki;
  37. for($i=0;$i<=$paczki;$i++) {
  38. $t_tmp='t_kw_'.$p_tmp;
  39. $p_tmp--;
  40. $p_kw=substr($kw_w,($i*3),3);
  41. $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}];
  42. if(($p_kw{0}==0)&&($p_kw{2}==1)&&($p_kw{1}<1)) $ka=${$t_tmp}[0]; //możliwe że $p_kw{1}!=1
  43. else if (($p_kw{2}>1 && $p_kw{2}<5)&&$p_kw{1}!=1) $ka=${$t_tmp}[2];
  44. else $ka=${$t_tmp}[1];
  45. $kw_slow.=$kw_w_s.' '.$ka.' ';
  46. }
  47. }
  48. $text = $kw_slow.' '.$tmp[1].'/100 gr.';
  49. return $text;
  50. }
  51. $slowniekwota = slownie(ABS($r[kwota]));
  52.  
  53.  


wszystko jest ok, ale jeśli w kwocie mam np 10.20 zł to pisze: dziesięć złotych 2/100 gr.
ale jeśli jest 10.23 zł to jest dobrze - reasumując, pomija mi ostatnie zero w groszach, ale jeśli jest zero groszy to jest OK....
nospor
Poniewaz, czy to bedzie .2 czy .20, czy .200000 to i tak to zawsze jest .2

A dzieje sie tak, poniewaz uzywac ABS na tekscie.

ALbo wiec dopisuj jedno zero na koncu gdy liczba bedzie jednocyfrowa, albie nie uzywaj ABS i przekazuj oryginalny text wink.gif

A na przyszlosc sprawdzaj jak dokladnie wyglada liczba, na ktorej operujesz na kazdym etapie to bedziesz wiedzial gdzie sie psuje
trueblue
Tyle, że 0.2 to nie to samo co 2/100.

Zmień sobie linijkę 48 na:
  1. $text = $kw_slow.' '.str_pad($tmp[1],2,'0').'/100 gr.';

bo tu leży problem.
nospor
Cytat
Tyle, że 0.2 to nie to samo co 2/100.
A czy ktos twierdzi inaczej? Wlasnie dlatego autor zglosil problem, bo zamiast 20/100 wyswietlalo mu 2/100
Napisalem jak problem rozwiazac. Twoj kod jest pokazuje to, co ja napisalem slownie
Cytat
wiec dopisuj jedno zero na koncu gdy liczba bedzie jednocyfrowa

smile.gif
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.