Przeglądaj źródła

Dodanie funkcji V::kwotaSlownie

Mariusz Muszyński 9 lat temu
rodzic
commit
db6e2ad91d
1 zmienionych plików z 57 dodań i 0 usunięć
  1. 57 0
      SE/se-lib/V.php

+ 57 - 0
SE/se-lib/V.php

@@ -460,4 +460,61 @@ EOF';
 		return $result;
 	}
 
+	public static function kwotaSlownie($kwota = 0, $waluta = "PLN") {
+		if (!preg_match("/^[[:digit:]]*(\.[[:digit:]]+)?$/",$kwota)) throw new Exception("Błędna liczba");
+		if (!preg_match("/^[[:digit:]]{0,48}(\.[[:digit:]]+)?$/",$kwota)) throw new Exception("Zbyt duża liczba");
+
+		$waluty = array(
+			'PLN' => array('złoty','złotych','złote'),
+			'USD' => array('dolar','dolarów','dolary')
+		);
+
+		$jednosci = array('zero','jeden','dwa','trzy','cztery','pięć','sześć','siedem','osiem','dziewięć','dziesięć','jedenaście',
+			'dwanaście','trzynaście','czternaście','piętnaście','szesnaście','siednaście','osiemnaście','dziewiętnaście');
+		$dziesiatki = array('','','dwadzieścia','trzydzieści','czterdzieści','pięćdziesiąt','sześćdziesiąt','siedemdziesiąt','osiemdziesiąt','dziewięćdziesiąt');
+		$setki = array('','sto','dwieście','trzysta','czterysta','pięćset','sześćset','siedemset','osiemset','dziewięćset');
+
+		if (!isset($waluty[$waluta])) $tysiace[] = array($waluta,$waluta,$waluta);
+		else $tysiace[] = $waluty[$waluta];
+		$tysiace[] = array('tysiąc','tysięcy','tysiące');
+		$tysiace[] = array('milion','milionów','miliony');
+		$tysiace[] = array('miliard','miliardów','miliardy');
+		$tysiace[] = array('bilion','bilionów','bilony');
+		$tysiace[] = array('biliard','biliardów','biliardy');
+		$tysiace[] = array('trylion','trylionów','tryliony');
+		$tysiace[] = array('tryliard','tryliardów','tryliardy');
+		$tysiace[] = array('kwadrylion','kwadrylionów','kwadryliony');
+		$tysiace[] = array('kwadryliard','kwadryliardów','kwaryliardy');
+		$tysiace[] = array('kwintylion','kwintylionów','kwintyliony');
+		$tysiace[] = array('kwintyliard','kwintyliardów','kwintyliardy');
+		$tysiace[] = array('sekstylion','sekstylionów','sepstyliony');
+		$tysiace[] = array('sekstyliard','sekstyliardów','sekstyliardy');
+		$tysiace[] = array('septylion','septylionów','septyliony');
+		$tysiace[] = array('septyliard','septyliardów','septyliardy');
+
+		$kwota = (!substr_count($kwota, '.')) ? $kwota.'.00' : $kwota;
+		list($zlote, $grosze) = explode('.', $kwota);
+		if (strlen($grosze) == 1) $grosze .= "0";
+		elseif (strlen($grosze) > 2) $grosze = round(substr($grosze, 0, 2).".".substr($grosze, 2), 0);
+		$zlote = strrev(wordwrap(strrev($zlote), 3, '.', true));
+
+		$zloteArr = explode('.', $zlote);
+		foreach ($zloteArr as $i => $l) {
+			$tysiac = count($zloteArr) - $i - 1;
+			$setka = $setki[floor($l/100)];
+			$dziesiatka = $dziesiatki[floor(($l%100)/10)];
+			$jednosc = $dziesiatka ? $jednosci[$l%10] : $jednosci[$l%100];
+			if ($l == 1 and ($tysiac > 0 or count($zloteArr) == 1)) $odmiana = 0;
+			elseif (floor($l%100/10) != 1 and $l%10 >= 2 and $l%10 <= 4) $odmiana = 2;
+			else $odmiana = 1;
+			if ($setka) $resultArr[] = $setka;
+			if ($dziesiatka) $resultArr[] = $dziesiatka;
+			$resultArr[] = $jednosc;
+			$resultArr[] = $tysiace[$tysiac][$odmiana];
+		}
+
+		$resultArr[] = $grosze . "/100";
+		return implode(" ", $resultArr);
+	}
+
 }