Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Closed TopicStart new topic
> kwoty słownie, obsługa złoty/złote/złotych :)
label
post 22.04.2006, 10:56:54
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 26.10.2005
Skąd: Gostynin

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


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.


--------------------

blog
Go to the top of the page
+Quote Post
TomASS
post 22.04.2006, 11:23:49
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

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


  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


--------------------
Go to the top of the page
+Quote Post
trucksweb
post 14.12.2007, 14:07:08
Post #3





Grupa: Zarejestrowani
Postów: 1 199
Pomógł: 31
Dołączył: 22.03.2004
Skąd: Warszawa

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


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. ?>


--------------------
Rozmawia dwóch dyrektorów:
- Jaki jest twój ideał sekretarki?
- 20-letnia dziewczyna z 30-letnim doświadczeniem.
Go to the top of the page
+Quote Post
kaszanka
post 16.06.2008, 14:36:38
Post #4





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

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


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.
Go to the top of the page
+Quote Post
Landon
post 20.07.2008, 00:21:06
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 3
Dołączył: 21.04.2007
Skąd: Sosnowiec

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


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. ?>


--------------------
Go to the top of the page
+Quote Post
misiek172
post 7.07.2010, 10:47:07
Post #6





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

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


to nie dawajcie mu zer co za problem, apropo skrypt nie czyta . tylko ,


--------------------
zmoderowano - waga i rozmiar
Go to the top of the page
+Quote Post
Cysiaczek
post 7.07.2010, 12:35:23
Post #7





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




miesiek172 - popatrz czasem na datę tematu zanim odpiszesz. winksmiley.jpg


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Closed TopicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 16:26