Number to words in php using NumberFormatter class

前端 未结 2 355
独厮守ぢ
独厮守ぢ 2021-01-13 12:49

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

相关标签:
2条回答
  • 2021-01-13 13:08
    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 );
    

    https://www.phptpoint.com/convert-number-into-words-in-php/

    0 讨论(0)
  • 2021-01-13 13:24

    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
    ?>
    
    0 讨论(0)
提交回复
热议问题