PHP算法--將數字金額轉換成大寫金額


最近在看一些PHP算法題,遇到一個將數字金額轉換成大寫金額的小算法題,這里貼出自己的一個例子。

注:這個小算法適用於10萬以內的金額。

<?php
//$num = 12345.67; 
function RMB_Upper($num)
{
    $num = round($num,2);  //取兩位小數
    $num = ''.$num;  //轉換成數字
    $arr = explode('.',$num);  

    $str_left = $arr[0]; // 12345
    $str_right = $arr[1]; // 67

    $len_left = strlen($str_left); //小數點左邊的長度
    $len_right = strlen($str_right); //小數點右邊的長度

    //循環將字符串轉換成數組,
    for($i=0;$i<$len_left;$i++)
    {
        $arr_left[] = substr($str_left,$i,1);
    }
    //print_r($arr_left);
    //output:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )

    for($i=0;$i<$len_right;$i++)
    {
        $arr_right[] = substr($str_right,$i,1);
    }
    //print_r($arr_right);
    //output:Array ( [0] => 6 [1] => 7 )
    
    //構造數組$daxie
    $daxie = array(
        '0'=>'零',
        '1'=>'壹',
        '2'=>'貳',
        '3'=>'叄',
        '4'=>'肆',
        '5'=>'伍',
        '6'=>'陸',
        '7'=>'柒',
        '8'=>'捌',
        '9'=>'玖',
    );

    //循環將數組$arr_left中的值替換成大寫
    foreach($arr_left as $k => $v)
    {
        $arr_left[$k] = $daxie[$v];
        switch($len_left--)
        {
            //數值后面追加金額單位
            case 5:
                $arr_left[$k] .= '萬';break;
            case 4:
                $arr_left[$k] .= '千';break;
            case 3:
                $arr_left[$k] .= '百';break;
            case 2:
                $arr_left[$k] .= '十';break;
            default:
                $arr_left[$k] .= '元';break;
        }
    }
    //print_r($arr_left);
    //output :Array ( [0] => 壹萬 [1] => 貳千 [2] => 叄百 [3] => 肆十 [4] => 伍元 )

    foreach($arr_right as $k =>$v)
    {
        $arr_right[$k] = $daxie[$v];
        switch($len_right--)
        {
            case 2:
                $arr_right[$k] .= '角';break;
            default:
                $arr_right[$k] .= '分';break;
        }
    }
    //print_r($arr_right);
    //output :Array ( [0] => 陸角 [1] => 柒分 )

    //將數組轉換成字符串,並拼接在一起
    $new_left_str = implode('',$arr_left);
    $new_right_str = implode('',$arr_right);

    $new_str = $new_left_str.$new_right_str;

    //echo $new_str;
    //output :'壹萬貳千叄百肆十伍元陸角柒分'

    //如果金額中帶有0,大寫的字符串中將會帶有'零千零百零十',這樣的字符串,需要替換掉
    $new_str = str_replace('零萬','零',$new_str);
    $new_str = str_replace('零千','零',$new_str);
    $new_str = str_replace('零百','零',$new_str);
    $new_str = str_replace('零十','零',$new_str);
    $new_str = str_replace('零零零','零',$new_str);
    $new_str = str_replace('零零','零',$new_str);
    $new_str = str_replace('零元','元',$new_str);


    //echo'<br/>';
    return $new_str;
}


echo RMB_Upper(12345.67);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM