Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kwoty słownie
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
label
Funkcja którą napisałem na potrzebe swojego skryptu. W zasadzie to są 2 funkcje tworzące całość ;]. Ta pierwsza to jest funkcja kogoś z tego forum. Dodałem obsługę odmieniania złotówek i groszy smile.gif Można to łatwo przerobić na np. euro czy coś.
  1. <?php
  2. function d2w( $digits )
  3. {
  4. $jednosci = Array( 'zero', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć' );
  5. $dziesiatki = Array( '', 'dziesięć', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'piećdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewiećdziesiąt' );
  6. $setki = Array( '', 'sto', 'dwieście', 'trzysta', 'czterysta', 'piećset', 'sześćset', 'siedemset', 'osiemset', 'dziewiećset' );
  7. $nastki = Array( 'dziesieć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dzięwietnaście' );
  8. $tysiace = Array( 'tysiąc', 'tysiące', 'tysięcy' );
  9.  
  10. $digits = (string) $digits;
  11. $digits = strrev( $digits );
  12. $i = strlen( $digits );
  13.  
  14. $string = '';
  15.  
  16. if( $i > 5 && $digits[5] > 0 )
  17. $string .= $setki[ $digits[5] ] . ' ';
  18. if( $i > 4 && $digits[4] > 1 )
  19. $string .= $dziesiatki[ $digits[4] ] . ' ';
  20. elseif( $i > 3 && $digits[4] == 1 )
  21. $string .= $nastki[$digits[3]] . ' ';
  22. if( $i > 3 && $digits[3] > 0 && $digits[4] != 1 )
  23. $string .= $jednosci[ $digits[3] ] . ' ';
  24.  
  25. $tmpStr = substr( strrev( $digits ), 0, -);
  26. if( strlen( $tmpStr ) > 0 )
  27. {
  28. $tmpInt = (int) $tmpStr;
  29. if( $tmpInt == 1 )
  30. $string .= $tysiace[0] . ' ';
  31. elseif( ( $tmpInt % 10 > 1 && $tmpInt % 10 < 5 ) && ( $tmpInt < 10 || $tmpInt > 20 ) )
  32. $string .= $tysiace[1] . ' ';
  33. else
  34. $string .= $tysiace[2] . ' ';
  35. }
  36.  
  37. if( $i > 2 && $digits[2] > 0 )
  38. $string .= $setki[$digits[2]] . ' ';
  39. if( $i > 1 && $digits[1] > 1 )
  40. $string .= $dziesiatki[$digits[1]] . ' ';
  41. elseif( $i > 0 && $digits[1] == 1 )
  42. $string .= $nastki[$digits[0]] . ' ';
  43. if( $digits[0] > 0 && $digits[1] != 1 )
  44. $string .= $jednosci[$digits[0]] . ' ';
  45.  
  46. return $string;
  47.  
  48. }
  49.  
  50. function slownie($kwota){
  51. $zl = array("złotych", "złoty", "złote");
  52. $gr = array("groszy", "grosz", "grosze");
  53. $kwotaArr = explode( ',', $kwota );
  54.  
  55. $ostZl = substr($kwotaArr[0], -1, 1);
  56. switch($ostZl){
  57. case "0":
  58. $zlote = $zl[0];
  59. break;
  60.  
  61. case "1":
  62. $ost2Zl = substr($kwotaArr[0], -2, 2);
  63.  
  64.  
  65. if($kwotaArr[0] == "1"){
  66. $zlote = $zl[1];
  67. }
  68. elseif($ost2Zl == "01"){
  69. $zlote = $zl[0];
  70. }
  71. else{
  72. $zlote = $zl[0];
  73. }
  74. break;
  75.  
  76. case "2":
  77. $ost2Zl = substr($kwotaArr[0], -2, 2);
  78. if($ost2Zl == "12"){
  79. $zlote = $zl[0];
  80. }
  81. else{
  82. $zlote = $zl[2];
  83. }
  84. break;
  85.  
  86. case "3":
  87. $ost2Zl = substr($kwotaArr[0], -2, 2);
  88. if($ost2Zl == "13"){
  89. $zlote = $zl[0];
  90. }
  91. else{
  92. $zlote = $zl[2];
  93. }
  94. break;
  95.  
  96. case "4":
  97. $ost2Zl = substr($kwotaArr[0], -2, 2);
  98. if($ost2Zl == "14"){
  99. $zlote = $zl[0];
  100. }
  101. else{
  102. $zlote = $zl[2];
  103. }
  104. break;
  105.  
  106. case "5":
  107. $zlote = $zl[0];
  108. break;
  109.  
  110. case "6":
  111. $zlote = $zl[0];
  112. break;
  113.  
  114. case "7":
  115. $zlote = $zl[0];
  116. break;
  117.  
  118. case "8":
  119. $zlote = $zl[0];
  120. break;
  121.  
  122. case "9":
  123. $zlote = $zl[0];
  124. break;
  125. }
  126.  
  127.  
  128.  
  129.  
  130. ############### PONIZEJ ||VVV|| GROSZE
  131.  
  132.  
  133.  
  134.  
  135.  
  136. $ostGr = substr($kwotaArr[1], -1, 1);
  137. switch($ostGr){
  138. case "0":
  139. $grosze = $gr[0];
  140. break;
  141.  
  142. case "1":
  143. $ost2Gr = substr($kwotaArr[1], -2, 2);
  144.  
  145.  
  146. if($kwotaArr[0] == "1"){
  147. $grosze = $gr[1];
  148. }
  149. elseif($ost2Gr == "01"){
  150. $grosze = $gr[1];
  151. }
  152. else{
  153. $grosze = $gr[0];
  154. }
  155. break;
  156.  
  157. case "2":
  158. $ost2Gr = substr($kwotaArr[1], -2, 2);
  159. if($ost2Gr == "12"){
  160. $grosze = $gr[0];
  161. }
  162. else{
  163. $grosze = $gr[2];
  164. }
  165. break;
  166.  
  167. case "3":
  168. $ost2Gr = substr($kwotaArr[1], -2, 2);
  169. if($ost2Gr == "13"){
  170. $grosze = $gr[0];
  171. }
  172. else{
  173. $grosze = $gr[2];
  174. }
  175. break;
  176.  
  177. case "4":
  178. $ost2Gr = substr($kwotaArr[1], -2, 2);
  179. if($ost2Gr == "14"){
  180. $grosze = $gr[0];
  181. }
  182. else{
  183. $grosze = $gr[2];
  184. }
  185. break;
  186.  
  187. case "5":
  188. $grosze = $gr[0];
  189. break;
  190.  
  191. case "6":
  192. $grosze = $gr[0];
  193. break;
  194.  
  195. case "7":
  196. $grosze = $gr[0];
  197. break;
  198.  
  199. case "8":
  200. $grosze = $gr[0];
  201. break;
  202.  
  203. case "9":
  204. $grosze = $gr[0];
  205. break;
  206. }
  207.  
  208.  
  209. return( d2w( $kwotaArr[0] ) . ' '.$zlote.' i ' . d2w( $kwotaArr[1] ) . $grosze );
  210. }
  211. ?>


użycie:
  1. <?php
  2. echo slownie("1499,99");
  3. ?>


Pozdrawiam.
TomASS
  1. <?php
  2. for($i=0;$i<10;$i++){
  3. $zl = rand();
  4. $grosze = rand(10,99)/100;
  5. $kwota = number_format($zl+$grosze,2,',','');
  6. echo $kwota.': '.slownie($kwota).'<br/>';
  7. }
  8. ?>

Działa jak talala smile.gif

Ja bym dodał tylko właśnie linijke:
  1. <?php
  2. $kwota = number_format($kwota2,',','');
  3. ?>


Gratulacje smile.gif
trucksweb
a ja mam problem, wszystko ladnie dziala jak cyfra jest w postaci: 120,39 natomiat gdy jest 120,00 to juz czyta:
sto dwadzieścia złotych i groszy

-brakuje słowa "zero", czy ktos moze powiedziec jak to poprawic ?

mam cos takiego:
  1. <?php
  2. $cena = echo number_format($sumowanie_brutto, 2, ',', ' ');
  3.  
  4. echo 'cena wynosi';
  5. echo slownie("$cena");
  6. ?>
kaszanka
Czy na prawdę nikt nie wie ja poprawić ten skrypt by przy kwocie 122.00zł wyświetlał: "sto dwadzieścia dwa złote i zero groszy", a nie: "sto dwadzieścia dwa złote i groszy" ?
Sytuacja taka jest zawsze gdy mamy zero groszy po przecinku.
Landon
Można to np tak zrobić

  1. <?php
  2. function d2w( $digits )
  3. {
  4. $jednosci = Array( 'zero', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć' );
  5. $dziesiatki = Array( '', 'dziesięć', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'piećdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewiećdziesiąt' );
  6. $setki = Array( '', 'sto', 'dwieście', 'trzysta', 'czterysta', 'piećset', 'sześćset', 'siedemset', 'osiemset', 'dziewiećset' );
  7. $nastki = Array( 'dziesieć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dzięwietnaście' );
  8. $tysiace = Array( 'tysiąc', 'tysiące', 'tysięcy' );
  9.  
  10. $digits = (string) $digits;
  11. $digits = strrev( $digits );
  12. $i = strlen( $digits );
  13.  
  14. $string = '';
  15.  
  16. if( $i > 5 && $digits[5] > 0 )
  17. $string .= $setki[ $digits[5] ] . ' ';
  18. if( $i > 4 && $digits[4] > 1 )
  19. $string .= $dziesiatki[ $digits[4] ] . ' ';
  20. elseif( $i > 3 && $digits[4] == 1 )
  21. $string .= $nastki[$digits[3]] . ' ';
  22. if( $i > 3 && $digits[3] > 0 && $digits[4] != 1 )
  23. $string .= $jednosci[ $digits[3] ] . ' ';
  24.  
  25. $tmpStr = substr( strrev( $digits ), 0, -);
  26. if( strlen( $tmpStr ) > 0 )
  27. {
  28. $tmpInt = (int) $tmpStr;
  29. if( $tmpInt == 1 )
  30. $string .= $tysiace[0] . ' ';
  31. elseif( ( $tmpInt % 10 > 1 && $tmpInt % 10 < 5 ) && ( $tmpInt < 10 || $tmpInt > 20 ) )
  32. $string .= $tysiace[1] . ' ';
  33. else
  34. $string .= $tysiace[2] . ' ';
  35. }
  36.  
  37. if( $i > 2 && $digits[2] > 0 )
  38. $string .= $setki[$digits[2]] . ' ';
  39. if( $i > 1 && $digits[1] > 1 )
  40. $string .= $dziesiatki[$digits[1]] . ' ';
  41. elseif( $i > 0 && $digits[1] == 1 )
  42. $string .= $nastki[$digits[0]] . ' ';
  43. if( $digits[0] > 0 && $digits[1] != 1 )
  44. $string .= $jednosci[$digits[0]] . ' ';
  45. if( !$string ) $string = $jednosci[0]
  46. return $string;
  47.  
  48. }
  49. ?>


Dodałem taką prostą linijkę
  1. <?php
  2. if( !$string ) $string = $jednosci[0]
  3. ?>
misiek172
to nie dawajcie mu zer co za problem, apropo skrypt nie czyta . tylko ,
Cysiaczek
miesiek172 - popatrz czasem na datę tematu zanim odpiszesz. winksmiley.jpg
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-2024 Invision Power Services, Inc.