最近在看一些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);
