Kwota, liczba słownie PHP
Skrypt pobiera liczbę w postaci np. 123.30 i zapisuje ją słownie. Kod można pobrać poniżej.
Przykład użycia dla wyświetlenia liczby słownie:
echo slownie(123.30);
Przykład użycia dla wyświetlenia kwoty słownie:
echo kwotaslownie(123.30);
Listing
<?php
if(!function_exists('str_split')){
function str_split($string,$len = 1) {
if ($len < 1) return false;
for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
$rt[$i] = substr($string, $len*$i, $len);
return($rt);
}
}
$slowa = Array(
'minus',
Array(
'zero',
'jeden',
'dwa',
'trzy',
'cztery',
'pięć',
'sześć',
'siedem',
'osiem',
'dziewięć'),
Array(
'dziesięć',
'jedenaście',
'dwanaście',
'trzynaście',
'czternaście',
'piętnaście',
'szesnaście',
'siedemnaście',
'osiemnaście',
'dziewiętnaście'),
Array(
'dziesięć',
'dwadzieścia',
'trzydzieści',
'czterdzieści',
'pięćdziesiąt',
'sześćdziesiąt',
'siedemdziesiąt',
'osiemdziesiąt',
'dziewięćdziesiąt'),
Array(
'sto',
'dwieście',
'trzysta',
'czterysta',
'pięćset',
'sześćset',
'siedemset',
'osiemset',
'dziewięćset'),
Array(
'tysiąc',
'tysiące',
'tysięcy'),
Array(
'milion',
'miliony',
'milionów'),
Array(
'miliard',
'miliardy',
'miliardów'),
Array(
'bilion',
'biliony',
'bilionów'),
Array(
'biliard',
'biliardy',
'biliardów'),
Array(
'trylion',
'tryliony',
'trylionów'),
Array(
'tryliard',
'tryliardy',
'tryliardów'),
Array(
'kwadrylion',
'kwadryliony',
'kwadrylionów'),
Array(
'kwintylion',
'kwintyliony',
'kwintylionów'),
Array(
'sekstylion',
'sekstyliony',
'sekstylionów'),
Array(
'septylion',
'septyliony',
'septylionów'),
Array(
'oktylion',
'oktyliony',
'oktylionów'),
Array(
'nonylion',
'nonyliony',
'nonylionów'),
Array(
'decylion',
'decyliony',
'decylionów')
);
function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','pięć')
$txt = $odmiany[2];
if ($int == 1) $txt = $odmiany[0];
$jednosci = (int) substr($int,-1);
$reszta = $int % 100;
if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
$txt = $odmiany[1];
return $txt;
}
function liczba($int){ // odmiana dla liczb < 1000
global $slowa;
$wynik = '';
$j = abs((int) $int);
if ($j == 0) return $slowa[1][0];
$jednosci = $j % 10;
$dziesiatki = ($j % 100 - $jednosci) / 10;
$setki = ($j - $dziesiatki*10 - $jednosci) / 100;
if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';
if ($dziesiatki > 0)
if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
else
$wynik .= $slowa[3][$dziesiatki-1].' ';
if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
return $wynik;
}
function slownie($int){
global $slowa;
$in = preg_replace('/[^-\d]+/','',$int);
$out = '';
if ($in{0} == '-'){
$in = substr($in, 1);
$out = $slowa[0].' ';
}
$txt = str_split(strrev($in), 3);
if ($in == 0) $out = $slowa[1][0].' ';
for ($i = count($txt) - 1; $i >= 0; $i--){
$liczba = (int) strrev($txt[$i]);
if ($liczba > 0)
if ($i == 0)
$out .= liczba($liczba).' ';
else
$out .= ($liczba > 1 ? liczba($liczba).' ' : '')
.odmiana( $slowa[4 + $i], $liczba).' ';
}
return trim($out);
}
function kwotaslownie($kwota){
$kwota = explode('.', $kwota);
$zl = preg_replace('/[^-\d]+/','', $kwota[0]);
$gr = preg_replace('/[^\d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
while(strlen($gr) < 2) $gr .= '0';
echo slownie($zl) . ' ' . odmiana(Array('złoty', 'złote', 'złotych'), $zl) .
(intval($gr) == 0 ? '' :
' ' . slownie($gr) . ' ' . odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
}
?>
Dodano przez: igor
Ranga: Administrator serwisu Punktów: 0
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
To samo tylko jako klasa, pozdro
- Zobacz kod dodany do tego wpisu
-
<?php
class D2W_pl {
public static function getSlowa()
{
return Array(
'minus',
Array(
'zero',
'jeden',
'dwa',
'trzy',
'cztery',
'pięć',
'sześć',
'siedem',
'osiem',
'dziewięć'),
Array(
'dziesięć',
'jedenaście',
'dwanaście',
'trzynaście',
'czternaście',
'piętnaście',
'szesnaście',
'siedemnaście',
'osiemnaście',
'dziewiętnaście'),
Array(
'dziesięć',
'dwadzieścia',
'trzydzieści',
'czterdzieści',
'pięćdziesiąt',
'sześćdziesiąt',
'siedemdziesiąt',
'osiemdziesiąt',
'dziewięćdziesiąt'),
Array(
'sto',
'dwieście',
'trzysta',
'czterysta',
'pięćset',
'sześćset',
'siedemset',
'osiemset',
'dziewięćset'),
Array(
'tysiąc',
'tysiące',
'tysięcy'),
Array(
'milion',
'miliony',
'milionów'),
Array(
'miliard',
'miliardy',
'miliardów'),
Array(
'bilion',
'biliony',
'bilionów'),
Array(
'biliard',
'biliardy',
'biliardów'),
Array(
'trylion',
'tryliony',
'trylionów'),
Array(
'tryliard',
'tryliardy',
'tryliardów'),
Array(
'kwadrylion',
'kwadryliony',
'kwadrylionów'),
Array(
'kwintylion',
'kwintyliony',
'kwintylionów'),
Array(
'sekstylion',
'sekstyliony',
'sekstylionów'),
Array(
'septylion',
'septyliony',
'septylionów'),
Array(
'oktylion',
'oktyliony',
'oktylionów'),
Array(
'nonylion',
'nonyliony',
'nonylionów'),
Array(
'decylion',
'decyliony',
'decylionów')
);
}
public static function str_split($string,$len = 1) {
if ($len < 1) return false;
for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
$rt[$i] = substr($string, $len*$i, $len);
return($rt);
}
public static function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','pięć')
$txt = $odmiany[2];
if ($int == 1) $txt = $odmiany[0];
$jednosci = (int) substr($int,-1);
$reszta = $int % 100;
if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
$txt = $odmiany[1];
return $txt;
}
public static function liczba($int){ // odmiana dla liczb < 1000
$slowa = self::getSlowa();
$wynik = '';
$j = abs((int) $int);
if ($j == 0) return $slowa[1][0];
$jednosci = $j % 10;
$dziesiatki = ($j % 100 - $jednosci) / 10;
$setki = ($j - $dziesiatki*10 - $jednosci) / 100;
if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';
if ($dziesiatki > 0)
if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
else
$wynik .= $slowa[3][$dziesiatki-1].' ';
if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
return $wynik;
}
public static function slownie($int){
$slowa = self::getSlowa();
$in = preg_replace('/[^-d]+/','',$int);
$out = '';
if ($in{0} == '-'){
$in = substr($in, 1);
$out = $slowa[0].' ';
}
$txt = self::str_split(strrev($in), 3);
if ($in == 0) $out = $slowa[1][0].' ';
for ($i = count($txt) - 1; $i >= 0; $i--){
$liczba = (int) strrev($txt[$i]);
if ($liczba > 0)
if ($i == 0)
$out .= self::liczba($liczba).' ';
else
$out .= ($liczba > 1 ? self::liczba($liczba).' ' : '')
.self::odmiana( $slowa[4 + $i], $liczba).' ';
}
return trim($out);
}
public static function kwotaslownie($kwota){
$kwota = explode('.', $kwota);
$zl = preg_replace('/[^-d]+/','', $kwota[0]);
$gr = preg_replace('/[^d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
while(strlen($gr) < 2) $gr .= '0';
echo self::slownie($zl) . ' ' . self::odmiana(Array('złoty', 'złote', 'złotych'), $zl) .
(intval($gr) == 0 ? '' :
' ' . self::slownie($gr) . ' ' . self::odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
}
}
echo D2W_pl::kwotaslownie("12920.23");
?>
-
autor: webrock.eu | 4309 | 2009-11-04 15:57:02
Krótsza definicja funkcji odmiana() i bardziej intuicyjne jej użycie:
autor: Emeszenes | 13119 | 2020-04-05 12:41:49
:: Losowe artykuły
:: Wymiana linków
Modowe inspiracje |
Android Gry i Aplikacje |
ZaplanujTransport.pl: Przeprowadzki, transport, aukcje |
Logo dla firmy |
Change Tires - Car Weather Forecast Reminder |
Laminas: MVC Framework for PHP |
IT Books Reviews and Programming: JS, JAVA, PHP, ANDROID, CSS |
Katalog roślin |
Programming articles: JAVA, PHP, C++, Python, JavaScript |
Kancelaria Adwokacka Łukasz Huszno