How to convert decimal number to words (money format) using PHP?

后端 未结 12 983
野趣味
野趣味 2020-12-19 03:38

I just need a little help here. Because I am creating a code for converting decimals to Money format in words. For example if

I have this number

<

12条回答
  •  被撕碎了的回忆
    2020-12-19 03:58

    // three hundred and thirteen rupees and seventy-six paise
    echo getIndianCurrency(313.76);
    
    function getIndianCurrency(float $number)
    {
        $decimal = round($number - ($no = floor($number)), 2) * 100;
        $hundred = null;
        $digits_length = strlen($no);
        $i = 0;
        $str = array();
        $words = array(0 => '', 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');
        $digits = array('', 'hundred','thousand','lakh', 'crore');
    
        while( $i < $digits_length ) {
            $divider = ($i == 2) ? 10 : 100;
            $number = floor($no % $divider);
            $no = floor($no / $divider);
            $i += $divider == 10 ? 1 : 2;
            if ($number) {
                $plural = (($counter = count($str)) && $number > 9) ? 's' : null;
                $hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
                $str [] = ($number < 21) ? $words[$number].' '. $digits[$counter]. $plural.' '.$hundred:$words[floor($number / 10) * 10].' '.$words[$number % 10]. ' '.$digits[$counter].$plural.' '.$hundred;
            } else $str[] = null;
        }
    
        $rupees = implode('', array_reverse($str));
        $paise = '';
    
        if ($decimal) {
            $paise = 'and ';
            $decimal_length = strlen($decimal);
    
            if ($decimal_length == 2) {
                if ($decimal >= 20) {
                    $dc = $decimal % 10;
                    $td = $decimal - $dc;
                    $ps = ($dc == 0) ? '' : '-' . $words[$dc];
    
                    $paise .= $words[$td] . $ps;
                } else {
                    $paise .= $words[$decimal];
                }
            } else {
                $paise .= $words[$decimal % 10];
            }
    
            $paise .= ' paise';
        }
    
        return ($rupees ? $rupees . 'rupees ' : '') . $paise ;
    }
    

    Uses:

    echo getIndianCurrency(313.76);
    

    Output:

    three hundred and thirteen rupees and seventy-six paise
    

提交回复
热议问题