Number to words in php using NumberFormatter class


Keywords:php 


Question: 

I have a difficulty solving my number to words function in php.

<?php

  $num = 29.29;
  $f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
  echo $f->format($num);
  //outputs Twenty-nine and two nine
?>

2 Answers: 

First of all, how 29.29 should pronounce is Twenty nine point two nine. Having said that, if you need to get exactly Twenty-nine and Twenty-nine, you can use below :

<?php
  $num = 29.29;
  $exp = explode('.', $num);
  $f = new NumberFormatter("en_US", NumberFormatter::SPELLOUT);
  echo ucfirst($f->format($exp[0])) . ' and ' . ucfirst($f->format($exp[1]));
  //outputs Twenty-nine and Twenty-nine
?>


function numberTowords($num)
{ 
  $ones = array(        
    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" 
    ); 
    $tens = array( 
    1 => "ten",
    2 => "twenty", 
    3 => "thirty", 
    4 => "forty", 
    5 => "fifty", 
    6 => "sixty", 
    7 => "seventy", 
    8 => "eighty", 
    9 => "ninety" 
); 

$hundreds = array( 
    "hundred", 
    "thousand", 
    "million", 
    "billion", 
    "trillion", 
    "quadrillion" 
);  

$num = number_format($num,2,".",","); 
$num_arr = explode(".",$num); 
$wholenum = $num_arr[0]; 
$decnum = $num_arr[1]; 
$whole_arr = array_reverse(explode(",",$wholenum)); 
krsort($whole_arr); 
$rettxt = ""; 

foreach($whole_arr as $key => $i){ 

    if($i < 20){ 
        $rettxt .= $ones[$i]; 
    }elseif($i < 100){ 
        $rettxt .= $tens[substr($i,0,1)]; 
        @$rettxt .= " ".$ones[substr($i,1,1)]; 
    }else{ 
        $rettxt .= $ones[substr($i,0,1)]." ".$hundreds[0]; 
        $rettxt .= " ".$tens[substr($i,1,1)]; 
        $rettxt .= " ".$ones[substr($i,2,1)]; 
    } 
    if($key > 0){ 
        $rettxt .= " ".$hundreds[$key]." "; 
    } 
} 
if($decnum > 0){ 
    $rettxt .= " and "; 
if($decnum < 20){ 
    $rettxt .= $ones[intval( $decnum) ]; 
}elseif( $decnum < 100){ 
    $rettxt .= $tens[substr($decnum,0,1)]; 
    $rettxt .= " ".$ones[substr($decnum,1,1)]; 
} 
 } 
 return $rettxt; 
} 

echo numberTowords( 29.29 );