eXorithm – Execute Algorithm: View / Run Algorithm number_string

Logo Beta

function number_string ($number
{
  $names = 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=>"forty", 50=>"fifty"
    60=>"sixty", 70=>"seventy", 80=>"eighty", 90=>"ninety"
  );
  
  $triplets = array
    100=>"hundred"
    1000=>"thousand"
    1000000=>"million"
    1000000000=>"billion"
    1000000000000=>"trillion"
    1000000000000000=>"quadrillion"
    1000000000000000000=>"quintillion"
    1000000000000000000000=>"sextillion"
    1000000000000000000000000=>"septillion"
    1000000000000000000000000000=>"octillion"
    1000000000000000000000000000000=>"nonillion"
  );
  
  krsort$names);
  krsort$triplets);
  
  if (abs$number) > PHP_INT_MAX) 
    throw new Exception'Maximum integer size for this version of PHP is '.PHP_INT_MAX);
  
  $prefix = ''
  $str = ''
  if ($number<0) {
    $prefix = 'negative '
    $number = $number*-1;
  }
  
  $remainder = 0;
  
  if ($number>=100) {
    
    foreach ($triplets as $num=>$name) {
      if ($num<=$number) {
        $str = $name
        $remainder = $number % $num
        $number = floor$number$num);
        break
      }
    }
    
    // how many of the triplets?
    $str = number_string$number).' '$str
    
    if ($remainder<100) $separator = ' and '
    else $separator = ', '
    
  } else {
    
    foreach ($names as $num=>$name) {
      if ($num<=$number) {
        $str = $name
        $remainder = $number % $num
        break
      }
    }
    
    $separator = '-'
  }
  
  // remainder to tack on?
  if ($remainder>0) {
    $str = $str$separatornumber_string$remainder);
  }
  
  return $prefix$str