Advertisement
arijulianto

Fungsi Terbilang (Complete)

Jul 19th, 2014
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.89 KB | None | 0 0
  1. <?php
  2. function terbilang($num){
  3.     $digits = array("nol","satu","dua","tiga","empat","lima","enam","tujuh","delapan","sembilan");
  4.     $orders = array(0=>"",1=>"puluh",2=>"ratus",3=>"ribu",6=>"juta",9=>"miliar",12=>"trilyun",15=>"kuadriliun");
  5.     $is_neg = $num<0;
  6.  
  7.     // angka di kiri desimal
  8.     $int = "";
  9.     if(preg_match("/^[+-]?(\d+)/",$num,$m)) $int = $m[1];
  10.     $mult = 0;                                                                    
  11.     $wint = "";
  12.  
  13.     // ambil ribuan/jutaan/dst
  14.     while(preg_match('/(\d{1,3})$/',$int,$m)){
  15.         // ambil satuan, puluhan dan ratusan
  16.         $s = $m[1] % 10;
  17.         $p = ($m[1] % 100 - $s)/10;
  18.         $r = ($m[1] - $p*10 - $s)/100;
  19.  
  20.         // konversi ratusan
  21.         if($r==0)
  22.             $g = "";
  23.         elseif($r==1)
  24.             $g = "se$orders[2]";
  25.         else
  26.             $g = $digits[$r]." $orders[2]";
  27.  
  28.         // konversi puluhan dan satuan
  29.         if($p==0){
  30.             if($s==0);
  31.             elseif($s==1)
  32.                 $g = ($g ? "$g ".$digits[$s] : ($mult==0 ? $digits[1] : "se"));
  33.             else
  34.                 $g = ($g ? "$g " : "").$digits[$s];
  35.         }elseif($p==1){
  36.             if($s==0)
  37.                 $g = ($g ? "$g " : "")."se$orders[1]";
  38.             elseif($s==1)
  39.                 $g = ($g ? "$g " : "")."sebelas";
  40.             else
  41.                 $g = ($g ? "$g " : "").$digits[$s]." belas";
  42.         }else{
  43.             $g = ($g ? "$g " : "").$digits[$p]." puluh".($s>0 ? " $digits[$s]" : "");
  44.         }
  45.  
  46.         // gabungkan hasil sebelumnya
  47.         $wint = ($g ? $g.($g=="se" ? "" : " ").$orders[$mult] : "").($wint ? " $wint" : "");
  48.  
  49.         // pangkas ribuan/jutaan/dsb yang sudah dikonversi
  50.         $int = preg_replace('/\d{1,3}$/','',$int);
  51.         $mult += 3;
  52.     }
  53.     if(!$wint) $wint = $digits[0];
  54.    
  55.     // angka di kanan desimal
  56.     $frac = "";
  57.     if(preg_match("/\.(\d+)/",$num,$m)) $frac = $m[1];
  58.     $wfrac = "";
  59.     for($i=0;$i<strlen($frac);$i++)
  60.         $wfrac .= ($wfrac ? " " : "").$digits[substr($frac,$i,1)];
  61.     return ($is_neg ? "minus " : "").$wint.($wfrac ? "koma $wfrac" : "");
  62. }
  63. // contoh demo: hapus raw/ pada URL ini untuk melihat hasilnya
  64. echo terbilang(-125.75);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement