Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Gotowy skrypt] Słowny zapis liczb w języku polskim
Forum PHP.pl > Forum > Gotowe rozwiązania
PMadej
Napisałem przed chwilą ten skrypt i wrzucam go tutaj bo może komuś się przyda biggrin.gif smile.gif [php:1:f691b68b63]<?php

########################################################
##
## Nazwa: Słowny zapis liczb [PL]
## Autor: Paweł Madej
##
## Data utworzenia: 2003-08-22
## Wersja: 1.0
## Licencja: GPL
## Uwagi: Możesz dowolnie modyfikować i wykorzystywać
## ten skrypt pod warunkiem zachowania praw
## autorskich i przesłania do mnie informacji
## o tym, że chcesz go wykorzystać.
##
## E-Mail: pmadej@gazeta.pl
##
## Działanie: Skrypt pobiera z formularza liczbę
## i zapisuje ją słownie i dodaje słowo
## "złotych" lub "złote" w zależności od
## ostatniej cyfry, a wartość po przecinku
## zapisuje w formie "XX/100"
##
########################################################


//formularz do podania liczby
print("Podaj liczbę z przedziału 1..999999.99");
print("<form action="test.php" method="post"><input type="test" name="i" value="$i"/>");
print("<input type="submit" value="zmień"/><br /><br />Wynik:<br /><br />");

//tablice zawierajace słowny zapis cyfr
$test = array ('jeden','dwa','trzy','cztery','pięć','sześć','siedem','osiem','dziewięć','dziesięć',
'jedenaście','dwanaście','trzynaście','czternaście','piętnaście','szesnaście','siedemnaście',
'osiemnaście','dziewiętnaście','dwadzieścia');
$test2 = array ('dziesięć','dwadzieścia','trzydzieści','czterdzieści','pięćdziesiąt','sześćdziesiąt',
'siedemdziesiąt','osiemdziesiąt','dziewięćdziesiąt','sto');
$test3 = array ('sto','dwieście','trzysta','czterysta','pięćset','sześćset','siedemset','osiemset','dziewięćset','jeden tysiąc');
$test4 = array ('jeden tysiąc','dwa tysiące','trzy tysiące','cztery tysiące');

//sprawdza czy liczba jest całkowita czy ma jakaś wartość po przecinku
//jesli tak przesyla ja do zapisania w formie XX/100
$ii=$i;
while($ii>1)
{
$ii--;
}
$ii=round($ii*100,0);
//------

//główny moduł skryptu sprawdzajacy jak duza jest liczba i na podstawie tego
//zamieniajacy cyfry na słowa
if ($i>0 AND $i<=20) //liczba z przedzialu 1..20
{
print($test[$i-1]);
}
elseif ($i>20 AND $i<=100) //liczba z przedzialu 20..100
{
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test2[$counter-1]." ".$test[$i-1]);
}
elseif($i>100 AND $i<=1000) //liczba z przedzialu 100..1000
{
while($i>100)
{
$i=$i-100;
$counter2++;
}
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test3[$counter2-1]." ".$test2[$counter-1]." ".$test[$i-1]);
}
elseif($i>1000 AND $i<=4999) //liczba z przedzialu 1000..4999
{
while($i>1000)
{
$i=$i-1000;
$counter3++;
}
while($i>100)
{
$i=$i-100;
$counter2++;
}
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test4[$counter3-1]." ".$test3[$counter2-1]." ".$test2[$counter-1]." ".$test[$i-1]);
}
elseif($i>=5000 AND $i<=20000) //liczba z przedzialu 5000..20000
{
while($i>1000)
{
$i=$i-1000;
$counter3++;
}
while($i>100)
{
$i=$i-100;
$counter2++;
}
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test[$counter3-1]." tysięcy ".$test3[$counter2-1]." ".$test2[$counter-1]." ".$test[$i-1]);
}
elseif($i>20000 AND $i<=100000) //liczba z przedzialu 20001..100000
{
while($i>10000)
{
$i=$i-10000;
$counter4++;
}
if($i>=2000 AND $i<=4000)
{
$tysiac=" tysiące ";
}
else
{
$tysiac=" tysięcy ";
}
while($i>1000)
{
$i=$i-1000;
$counter3++;
}
while($i>100)
{
$i=$i-100;
$counter2++;
}
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test2[$counter4-1]." ".$test[$counter3-1].$tysiac.$test3[$counter2-1]." ".$test2[$counter-1]." ".$test[$i-1]);
}
elseif($i>=100000 AND $i<1000000) //liczba z przedzialu 100000..999999.99
{
while($i>100000)
{
$i=$i-100000;
$counter5++;
}
while($i>10000)
{
$i=$i-10000;
$counter4++;
}
if($i>=2000 AND $i<=4000)
{
$tysiac=" tysiące ";
}
else
{
$tysiac=" tysięcy ";
}
while($i>1000)
{
$i=$i-1000;
$counter3++;
}
while($i>100)
{
$i=$i-100;
$counter2++;
}
while($i>10)
{
$i=$i-10;
$counter++;
}
print($test3[$counter5-1]." ".$test2[$counter4-1]." ".$test[$counter3-1].$tysiac.$test3[$counter2-1]." ".$test2[$counter-1]." ".$test[$i-1]);
}
else //liczba z poza przedziału 1..999999.99
{
print("$i jest liczbą miejszą od 1 lub wieksza od 1000000");
}

//dopisanie na koncu słowa "złotych" lub "złote" w zależności od ostatniej cyfry
if ($i >=2 AND $i<=4)
{
print(" złote ");
}
else
{
print(" złotych ");
}

//dopisanie na koncu ilosc groszy w formie "XX/100"
if ($ii!=0)
{
print(" i ".$ii."/100");
}
?>[/php:1:f691b68b63]

Update [22:32]: Skrypt nie działa tak jak powinien (liczbę np. 111 zapisuje jako "sto dziesięć jeden"), ale nie usuwam go, wkleje tu poprawioną wersje.
T-r-u-i
Poniewaz calkiem niedawno mialem podobna funkcje do napisania moge tez ja udostepnic... Wydaje mi sie ze dziala poprawnie ale warto byscie przetestowali... wszelkie uwagi odnosnie dzialania prosze zglaszac na maila smile.gif
W kodzie nie ma komentarzy ale chyba polapiecie sie o co chodzi... jezeli potrzebujecie wartosci powyzej milonow to musicie sobie zdefiniowac dodatkowe tablice

  1. <?
  2. /*
  3. Dariusz Polarczyk (Trui)
  4. php@trui.net
  5.  
  6. Data utworzenia 1.VII.2004
  7. wersja 1.0
  8.  
  9. Funkcje udostepniam do celow edukacyjnych !
  10. Legalne wykorzystywanie jej w komercyjnych projektach 
  11. wymaga mojej zgody... :)
  12.  
  13. */
  14. function ZwrocSlownie($liczba)
  15. {
  16. $slowa[&#092;"1\"]=array (1=>'jeden','dwa','trzy','cztery','pi&ecirc;c','szeœ&aelig;','siedem','osiem','dziewi&ecirc;&aelig;');
  17. $slowa[&#092;"2a\"]=array ('dziesi&ecirc;&aelig;', 'jedenaœcie', 'dwanaœcie', 'trzynaœcie', 'czternaœcie', 'pi&ecirc;tnaœcie', 'szesnaœcie', 'siedemnaœcie', 'osiemnaœcie','dziewi&ecirc;tnaœcie'); 
  18. $slowa[&#092;"2\"] = array (2=>'dwadzieœcia', 'trzydzieœci', 'czterdzieœci', 'pi&ecirc;&aelig;dziesi&sup1;t', 'szeœ&aelig;dziesi&sup1;t', 'siedemdziesi&sup1;t', 'osiemdziesi&sup1;t', 'dziewi&ecirc;&aelig;dziesi&sup1;t'); 
  19. $slowa[&#092;"3\"] = array (1=> 'sto','dwieœcie','trzysta','czterysta','pi&ecirc;&aelig;set','szeœ&aelig;set','siedemset','osiemset','dziewi&ecirc;&aelig;set'); 
  20.  
  21. $jednostki[1]= array ('tysi&sup1;c', 'tysi&sup1;ce', 'tysi&ecirc;cy'); 
  22. $jednostki[2]= array ('milion', 'miliony', 'milionów'); 
  23.  
  24. $waluta[2]= array ('grosz', 'grosze', 'groszy'); 
  25. $waluta[1]= array ('z&sup3;oty', 'z&sup3;ote', 'z&sup3;otych'); 
  26.  
  27. $podstawa=floor($liczba);
  28. $reszta=substr($liczba, (strpos($liczba, &#092;".\")+1), 2);
  29. $reszta=str_pad($reszta, 2, &#092;"0\");
  30. $dlugosc_podstawy=strlen($podstawa);
  31. $liczba_trojek=floor($dlugosc_podstawy/3);
  32. $liczba_testowa=($dlugosc_podstawy/3);
  33.  
  34. $tmp=$podstawa;
  35. for($a=0; $a<=$liczba_trojek; $a++)
  36. {
  37.  
  38. $trojki[$a]=substr($tmp, -3);
  39. $tmp=substr($tmp, 0, (strlen($tmp)-3));
  40. }
  41.  
  42. if($liczba_testowa==$liczba_trojek)
  43. {
  44. $trojka=array_pop($trojki);
  45. $liczba_trojek--;
  46. }
  47. $jednostki_tmp=$liczba_trojek;
  48. while($trojka=array_pop($trojki))
  49. {
  50. $trojka_bckp=$trojka;
  51.  
  52. $jednosci=substr($trojka, -1);
  53. $trojka=substr($trojka, 0, (strlen($trojka)-1));
  54. $dziesiatki=substr($trojka, -1);
  55. $trojka=substr($trojka, 0, (strlen($trojka)-1));
  56. $setki=substr($trojka, -1);
  57. $trojka=substr($trojka, 0, (strlen($trojka)-1));
  58.  
  59. echo($slowa[&#092;"3\"][$setki].\" \");
  60.  
  61. if($dziesiatki==1)
  62. {
  63. echo($slowa[&#092;"2a\"][$jednosci].\" \");
  64. }
  65. else
  66. {
  67. echo($slowa[&#092;"2\"][$dziesiatki].\" \".$slowa[\"1\"][$jednosci].\" \");
  68. }
  69. if(($jednosci==1)&&($dziesiatki==0)&&($setki==0))
  70. {
  71. echo($jednostki[$jednostki_tmp][0]);
  72. }
  73. else if((($jednosci>1)&&($jednosci<5))&&($dziesiatki!=1))
  74. {
  75. echo($jednostki[$jednostki_tmp][1]);
  76. }
  77. else
  78. {
  79. echo($jednostki[$jednostki_tmp][2]);
  80. }
  81. $jednostki_tmp--;
  82. echo(&#092;" \");
  83. }
  84.  
  85. if(($jednosci==1)&&($dziesiatki==0)&&($setki==0))
  86. {
  87. echo($waluta[1][0]);
  88. }
  89. else if((($jednosci>1)&&($jednosci<5))&&($dziesiatki!=1))
  90. {
  91. echo($waluta[1][1]);
  92. }
  93. else
  94. {
  95. echo($waluta[1][2]);
  96. }
  97. echo(&#092;" \");
  98. $reszta_tmp=$reszta;
  99. $jednosci=substr($reszta, -1);
  100. $reszta=substr($reszta, 0, (strlen($reszta)-1));
  101. $dziesiatki=substr($reszta, -1);
  102. $reszta=substr($trojka, 0, (strlen($reszta)-1));
  103.  
  104. if($dziesiatki==1)
  105. {
  106. echo($slowa[&#092;"2a\"][$jednosci].\" \");
  107. }
  108. else
  109. {
  110. echo($slowa[&#092;"2\"][$dziesiatki].\" \".$slowa[\"1\"][$jednosci].\" \");
  111. }
  112.  
  113. if(($jednosci==1)&&($dziesiatki==0)&&($setki==0))
  114. {
  115. echo($waluta[2][0]);
  116. }
  117. else if((($jednosci>1)&&($jednosci<5))&&($dziesiatki!=1))
  118. {
  119. echo($waluta[2][1]);
  120. }
  121. else
  122. {
  123. echo($waluta[2][2]);
  124. }
  125. }
  126. ?>


Pozdrawiam
/Trui
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.