PHP數字金額轉換大寫金額
早些年做CRM用到的一個金額轉換函式,今天從舊專案中拿出來記錄一下。金額轉換的函式方法有很多,都很不錯。不過這個是小崔剛工作的時候寫的一個轉換函式,多少還是有點紀念意義。如有問題請朋友們指出,小崔及時修正。謝謝啦!
廢話不多說直接上程式碼:
1 <?php 2 3 /** 4 * 數字金額轉換大寫數字 5 * $num 數字型別 6 */ 7 8 function inttodaxie($num) { 9//判斷$num是否數字 10if(!is_numeric($num)) return -1; 11$dint = array('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'); 12$len = strlen($num); 13$dstr = ''; 14for($i = 0; $i <= $len; $i++) { 15$key_ = substr($num, $i, 1); 16$dstr .= $dint[$key_]; 17} 18return $dstr; 19 } 20 21 $result = inttodaxie(90011234); 22 var_dump($result); 23 echo '<br>';
以上是基礎轉換程式碼,在這個基礎上進行二次改造:
1 <?php 2 3 /** 4 * 轉換大寫金額 5 * $num 數字型別 6 */ 7 8 function inttod($num) { 9//判斷$num是否存在 10if(!$num) return '零圓'; 11//保留小數點後兩位 12$num = round($num, 2); 13//將浮點轉換為整數 14$tem_num = $num * 100; 15//判斷數字長度 16$tem_num_len = strlen($tem_num); 17if($tem_num_len > 14) { 18return '數字太大了吧,有這麼大的金錢嗎'; 19} 20 21//大寫數字 22$dint = array('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'); 23//大寫金額單位 24$danwei = array('仟', '佰', '拾', '億', '仟', '佰', '拾', '萬', '仟', '佰', '拾', '圓'); 25$danwei1 = array('角', '分'); 26 27//空的變數用來儲存轉換字串 28$daxie = ''; 29 30//分割數字,區分圓角分 31list($left_num, $right_num) = explode('.', $num); 32 33//計算單位長度 34$danwei_len = count($danwei); 35//計算分割後的字串長度 36$left_num_len = strlen($left_num); 37$right_num_len = strlen($right_num); 38 39//迴圈計算億萬元等 40for($i = 0; $i < $left_num_len; $i++) { 41//迴圈單個文字 42$key_ = substr($left_num, $i, 1); 43 44//判斷數字不等於0或數字等於0與金額單位為億、萬、圓,就返回完整單位的字串 45if($key_ !== '0' || ($key_ == '0' && ($danwei[$danwei_len - $left_num_len + $i] == '億' || $danwei[$danwei_len - $left_num_len + $i] == '萬' || $danwei[$danwei_len - $left_num_len + $i] == '圓'))) { 46$daxie = $daxie . $dint[$key_] . $danwei[$danwei_len - $left_num_len + $i]; 47} else { 48//否則就不含單位 49$daxie = $daxie . $dint[$key_]; 50} 51} 52 53//迴圈計算角分 54for($i = 0; $i < $right_num_len; $i++) { 55$key_ = substr($right_num, $i, 1); 56if($key_ > 0) { 57$daxie = $daxie . $dint[$key_] . $danwei1[$i]; 58} 59} 60 61//計算轉換後的長度 62$daxie_len = strlen($daxie); 63//設定文字切片從0開始,utf-8漢字佔3個字元 64$j = 0; 65while($daxie_len > 0) { 66//每次切片兩個漢字 67$str = substr($daxie, $j, 6); 68//判斷切片後的文字不等於零萬、零圓、零億、零零 69if($str == '零萬' || $str == '零圓' || $str == '零億' || $str == '零零') { 70//重新切片 71$left = substr($daxie, 0, $j); 72$right = substr($daxie, $j + 3); 73$daxie = $left . $right; 74} 75$j += 3; 76$daxie_len -= 3; 77} 78 79return '人民幣' . $daxie . '整'; 80 } 81 82 $result = inttod(99090909090.19); 83 var_dump($result);
執行結果:
原始碼已上傳GitHub:https://github.com/cuiyuanxin/php-demo/blob/master/capital.php
純手打筆記,如有錯誤請評論提出,謝謝。