Created
January 8, 2020 13:03
-
-
Save barokurniawan/45097f3d5595ea038cc30c1cdf7b90dc to your computer and use it in GitHub Desktop.
PHP Terbilang dalam bahasa inggris
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
class CurencyLang | |
{ | |
static function toEnglish($number) | |
{ | |
$hyphen = '-'; | |
$conjunction = ' and '; | |
$separator = ', '; | |
$negative = 'negative '; | |
$decimal = ' point '; | |
$dictionary = array( | |
0 => 'zero', | |
1 => 'one', | |
2 => 'two', | |
3 => 'three', | |
4 => 'four', | |
5 => 'five', | |
6 => 'six', | |
7 => 'seven', | |
8 => 'eight', | |
9 => 'nine', | |
10 => 'ten', | |
11 => 'eleven', | |
12 => 'twelve', | |
13 => 'thirteen', | |
14 => 'fourteen', | |
15 => 'fifteen', | |
16 => 'sixteen', | |
17 => 'seventeen', | |
18 => 'eighteen', | |
19 => 'nineteen', | |
20 => 'twenty', | |
30 => 'thirty', | |
40 => 'fourty', | |
50 => 'fifty', | |
60 => 'sixty', | |
70 => 'seventy', | |
80 => 'eighty', | |
90 => 'ninety', | |
100 => 'hundred', | |
1000 => 'thousand', | |
1000000 => 'million', | |
1000000000 => 'billion', | |
1000000000000 => 'trillion', | |
1000000000000000 => 'quadrillion', | |
1000000000000000000 => 'quintillion' | |
); | |
if (!is_numeric($number)) { | |
return false; | |
} | |
if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX) { | |
trigger_error( | |
'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, | |
E_USER_WARNING | |
); | |
return false; | |
} | |
if ($number < 0) { | |
return $negative . self::toEnglish(abs($number)); | |
} | |
$string = $fraction = null; | |
if (strpos($number, '.') !== false) { | |
list($number, $fraction) = explode('.', $number); | |
} | |
switch (true) { | |
case $number < 21: | |
$string = $dictionary[$number]; | |
break; | |
case $number < 100: | |
$tens = ((int) ($number / 10)) * 10; | |
$units = $number % 10; | |
$string = $dictionary[$tens]; | |
if ($units) { | |
$string .= $hyphen . $dictionary[$units]; | |
} | |
break; | |
case $number < 1000: | |
$hundreds = $number / 100; | |
$remainder = $number % 100; | |
$string = $dictionary[$hundreds] . ' ' . $dictionary[100]; | |
if ($remainder) { | |
$string .= $conjunction . self::toEnglish($remainder); | |
} | |
break; | |
default: | |
$baseUnit = pow(1000, floor(log($number, 1000))); | |
$numBaseUnits = (int) ($number / $baseUnit); | |
$remainder = $number % $baseUnit; | |
$string = self::toEnglish($numBaseUnits) . ' ' . $dictionary[$baseUnit]; | |
if ($remainder) { | |
$string .= $remainder < 100 ? $conjunction : $separator; | |
$string .= self::toEnglish($remainder); | |
} | |
break; | |
} | |
if (null !== $fraction && is_numeric($fraction)) { | |
$string .= $decimal; | |
$words = array(); | |
foreach (str_split((string) $fraction) as $number) { | |
$words[] = $dictionary[$number]; | |
} | |
$string .= implode(' ', $words); | |
} | |
return ucwords($string); | |
} | |
/* | |
penggunaan : echo CurencyLang::toEnglish("12500"); | |
*/ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Nice!!!