Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wart. bezwgledna problem z wartosciami ulamkowymi
Forum PHP.pl > Forum > Przedszkole
kotkon
  1. <?php
  2. echo $Kwota;
  3. if ($Kwota < 0)
  4. {
  5.  
  6. $Kwota = abs($Kwota);
  7. }
  8. echo $Kwota;
  9. ?>



ucina mi wartosci po przecinku z liczby -444.33 robi mi 444
FiDO
Jestes tego pewien? Pokaz moze wiecej kodu.. zarowno manual jak i przetestowany przeze mnie przyklad twierdzi, ze float jako parametr funkcji abs nie stanowi problemu i zwraca mi poprawny wynik.
kotkon
  1. <?php
  2. function slownie( $Kwota )
  3. {
  4. echo $Kwota;
  5. if ($Kwota < 0)
  6. {
  7. echo 'minus ';
  8. $Kwota = abs($Kwota);
  9. }
  10. echo $Kwota;
  11. $Jednosci = Array( 'zero', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć','dziesieć', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dzięwietnaście' );
  12.  $Dziesiatki = Array( '', 'dziesięć', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'piećdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewiećdziesiąt' );
  13.  $Setki = Array( '', 'sto', 'dwieście', 'trzysta', 'czterysta', 'piećset', 'sześćset', 'siedemset', 'osiemset', 'dziewiećset' );
  14.  
  15.  
  16.  
  17. while ($Kwota[0]=="0") { $Kwota=substr($Kwota,1,strlen($Kwota)); }
  18.  
  19. //rozlozenie na grosze i na pelną sume
  20. $Podzial = explode(".", $Kwota);
  21.  
  22. $Zlote = $Podzial[0];
  23. $Grosze = $Podzial[1];
  24.  
  25. $j = substr("$Grosze", -1); // zwraca "Jednostki"
  26. $d = substr("$Grosze",-2,1); // zwraca "Dziesiątki"
  27.  
  28.  
  29.  
  30. //okreslenie kwotowo groszy 
  31. if ($Grosze == '0')
  32. {
  33. $Grosze_slownie = $Jednosci[$Grosze].' gr';
  34. }
  35. elseif ($Grosze == '1')
  36. {
  37. $Grosze_slownie = $Jednosci[$Grosze].' gr';
  38. }
  39. elseif ($Grosze < '5')
  40. {
  41. $Grosze_slownie = $Jednosci[$Grosze].' gr';
  42. }
  43. elseif ($Grosze < '20')
  44. {
  45. $Grosze_slownie = $Jednosci[$Grosze].' gr';
  46. }
  47. elseif ($Grosze < '100')
  48. {
  49. if ($j != '0')
  50. {$a = $Jednosci[$j];}
  51. else
  52. {$a = '';}
  53.  
  54. $b = $Dziesiatki[$d];
  55. $Grosze_slownie = $b.' '.$a.' gr';
  56. }
  57.  
  58.  
  59.  
  60.  
  61. //okreslenie kwotowo Zlote
  62.  
  63. $j = substr("$Zlote",-1); // zwraca "Jednostki"
  64. $d = substr("$Zlote",-2,1); // zwraca "Dziesiątki"
  65. $s = substr("$Zlote",-3,1); // zwraca "setki"
  66. $tj = substr("$Zlote",-4,1); // zwraca "jednostki tysiecy"
  67. $td = substr("$Zlote",-5,1); // zwraca "dzieatki tysiecy"
  68. $ts = substr("$Zlote",-6,1); // zwraca "setki tysiecy"
  69. if ($Zlote == '0')
  70. {
  71. $Zlote_slownie = $Jednosci[$Zlote].' zł';
  72. }
  73. elseif ($Zlote == '1')
  74. {
  75. $Zlote_slownie = $Jednosci[$Zlote].' zł';
  76. }
  77. elseif ($Zlote < '5')
  78. {
  79. $Zlote_slownie = $Jednosci[$Zlote].' zł';
  80. }
  81. elseif ($Zlote < '20')
  82. {
  83. $Zlote_slownie = $Jednosci[$Zlote].' zł';
  84. }
  85. elseif ($Zlote < '100')
  86. {
  87. if ($j != '0')
  88. {$a = $Jednosci[$j];}
  89. else
  90. {$a = '';}
  91. $a = $Jednosci[$j];
  92. $b = $Dziesiatki[$d];
  93. $Zlote_slownie = $b.' '.$a.' zł';
  94. }
  95. elseif ($Zlote < '999')
  96. {
  97. if ($j != '0')
  98. {$a = $Jednosci[$j];}
  99. else
  100. {$a = '';}
  101.  
  102. $b = $Dziesiatki[$d];
  103. $c = $Setki[$s];
  104. $Zlote_slownie = $c.' '.$b.' '.$a.' zł';
  105. }
  106. elseif ($Zlote < '1999')
  107. {
  108. if ($j != '0')
  109. {$a = $Jednosci[$j];}
  110. else
  111. {$a = '';}
  112.  
  113. $b = $Dziesiatki[$d];
  114. $c = $Setki[$s];
  115.  
  116.  
  117. $d = $Jednosci[$tj];
  118. $Zlote_slownie = $d.' tysiąc '.$c.' '.$b.' '.$a.' zł';
  119. }
  120. elseif ($Zlote < '4999')
  121. {
  122. if ($j != '0')
  123. {$a = $Jednosci[$j];}
  124. else
  125. {$a = '';}
  126.  
  127. $b = $Dziesiatki[$d];
  128. $c = $Setki[$s];
  129. $d = $Jednosci[$tj];
  130. $Zlote_slownie = $d.' tysiące '.$c.' '.$b.' '.$a.' zł';
  131. }
  132. elseif ($Zlote < '19999')
  133. {
  134. if ($j != '0')
  135. {$a = $Jednosci[$j];}
  136. else
  137. {$a = '';}
  138.  
  139.  
  140. $b = $Dziesiatki[$d];
  141. $c = $Setki[$s];
  142. $t = $td.$tj;
  143. $d = $Jednosci[$t];
  144.  
  145. $Zlote_slownie = $d.' tysięcy '.$c.' '.$b.' '.$a.' zł';
  146. }
  147. elseif ($Zlote < '99999')
  148. {
  149. if ($j != '0')
  150. {$a = $Jednosci[$j];}
  151. else
  152. {$a = '';}
  153.  
  154. $b = $Dziesiatki[$d];
  155. $c = $Setki[$s];
  156. if ($tj != '0')
  157. {$d = $Jednosci[$tj];}
  158. else
  159. {$d = '';}
  160.  
  161. $e = $Dziesiatki[$td];
  162. $Zlote_slownie = $e.' '.$d.' tysięcy '.$c.' '.$b.' '.$a.' zł';
  163. }
  164. elseif ($Zlote < '999999')
  165. {
  166. if ($j != '0')
  167. {$a = $Jednosci[$j];}
  168. else
  169. {$a = '';}
  170.  
  171. $b = $Dziesiatki[$d];
  172. $c = $Setki[$s];
  173. if ($tj != '0')
  174. {$d = $Jednosci[$tj];}
  175. else
  176. {$d = '';}
  177.  
  178. $e = $Dziesiatki[$td];
  179. $f = $Setki[$ts];
  180. $Zlote_slownie = $f.' '.$e.' '.$d.' tysięcy '.$c.' '.$b.' '.$a.' zł';
  181. }
  182.  
  183. ################################################################################
    ##
  184.  
  185.  
  186. echo $Zlote_slownie.' '.$Grosze_slownie;
  187. }
  188. ?>
nospor
Gdy Fido prosil cie o kod, chodzilo mu raczej bardziej w jaki sposob tworzysz zmienna $Kwota. Mnie zresztą to też interesuje
kotkon
ona jest okreslana:

  1. <? 
  2. echo $FK_SumaBruttoK;
  3. slownie( $FK_SumaBruttoK );
  4. ?>

kwota jest pokazana w formie z wartoscia po przecinku
nospor
nie rozumiemy sie. Mi chodzilo o samo żródlo danej, czyli w tym przypadku skad ci sie wziela zmienna :$FK_SumaBruttoK
moze w niej jest jakis blad. Bo ja tez testowalem ten kodzik i dziala bez zarzutu na zmiennach typu float. blad musi byc w zawartosci zmiennej.

tylko nie pisz ze : $FK_SumaBruttoK=$innazmienna;
pdaj wowczas wartosc tej $innazmienna i tak rekurencyjnie smile.gif
php programmer
a moze metodą prymitywna? - traktujesz liczbe jako stringa, czyli
  1. <?php
  2.  
  3. $liczba = str_replace('-','',$liczba);
  4.  
  5. ?>


głupie ale powinno dzialac
kotkon
Kod
-637.00-637.00minus 637sześćset trzydzieści siedem zł gr


tyle mi wyswietla przegladarka, wartosci przes słowem minus sa wartosciami tej zmiennej przed umieszczeniem w fukncji, natomiast po slowie minus to co wykazuje to zamienie liczby na dodatnią.

O to chodziło
R4v3N
ewentualnie zawsze mozna napisac wlasna funkcje tongue.gif

  1. <?php
  2. function modul($liczba) {
  3. if($liczba<0) $liczba = $liczba * (-1);
  4.  
  5. return $liczba;
  6. }
  7. ?>
FiDO
Jasne.. moze wymyslcie kolo na nowo.. funkcja abs() jest w pelni sprawna, nie w niej tkwi blad. Ale przez ten kod wyzej to sie przekopywal nie bede.. jest delikatnie mowiac malo czytelny.
A swoja droga to funkcja do zamiany liczby na slownie jest juz na forum, wystarczy poszukac.
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.