php將金額數(shù)字轉(zhuǎn)化為中文大寫
更新時(shí)間:2015年07月09日 11:27:55 投稿:hebedich
本文給大家匯總介紹了幾種php將金額數(shù)字轉(zhuǎn)化為中文大寫的實(shí)用函數(shù),各有優(yōu)劣,小伙伴們根據(jù)自己的項(xiàng)目需求自由選擇吧。
php將金額數(shù)字轉(zhuǎn)化為中文大寫
echo toChineseNumber(1234567890);//壹拾貳億叁仟肆佰伍拾陸萬(wàn)柒仟捌佰玖拾圓 function toChineseNumber($money){ $money = round($money,2); $cnynums = array("零","壹","貳","叁","肆","伍","陸","柒","捌","玖"); $cnyunits = array("圓","角","分"); $cnygrees = array("拾","佰","仟","萬(wàn)","拾","佰","仟","億"); list($int,$dec) = explode(".",$money,2); $dec = array_filter(array($dec[1],$dec[0])); $ret = array_merge($dec,array(implode("",cnyMapUnit(str_split($int),$cnygrees)),"")); $ret = implode("",array_reverse(cnyMapUnit($ret,$cnyunits))); return str_replace(array_keys($cnynums),$cnynums,$ret); } function cnyMapUnit($list,$units) { $ul=count($units); $xs=array(); foreach (array_reverse($list) as $x) { $l=count($xs); if ($x!="0" || !($l%4)) $n=($x=='0'?'':$x).($units[($l-1)%$ul]); else $n=is_numeric($xs[0][0])?$x:''; array_unshift($xs,$n); } return $xs; }
代碼二:
/** *數(shù)字金額轉(zhuǎn)換成中文大寫金額的函數(shù) *String Int $num 要轉(zhuǎn)換的小寫數(shù)字或小寫字符串 *return 大寫字母 *小數(shù)位為兩位 **/ function num_to_rmb($num){ $c1 = "零壹貳叁肆伍陸柒捌玖"; $c2 = "分角元拾佰仟萬(wàn)拾佰仟億"; //精確到分后面就不要了,所以只留兩個(gè)小數(shù)位 $num = round($num, 2); //將數(shù)字轉(zhuǎn)化為整數(shù) $num = $num * 100; if (strlen($num) > 10) { return "金額太大,請(qǐng)檢查"; } $i = 0; $c = ""; while (1) { if ($i == 0) { //獲取最后一位數(shù)字 $n = substr($num, strlen($num)-1, 1); } else { $n = $num % 10; } //每次將最后一位數(shù)字轉(zhuǎn)化為中文 $p1 = substr($c1, 3 * $n, 3); $p2 = substr($c2, 3 * $i, 3); if ($n != '0' || ($n == '0' && ($p2 == '億' || $p2 == '萬(wàn)' || $p2 == '元'))) { $c = $p1 . $p2 . $c; } else { $c = $p1 . $c; } $i = $i + 1; //去掉數(shù)字最后一位了 $num = $num / 10; $num = (int)$num; //結(jié)束循環(huán) if ($num == 0) { break; } } $j = 0; $slen = strlen($c); while ($j < $slen) { //utf8一個(gè)漢字相當(dāng)3個(gè)字符 $m = substr($c, $j, 6); //處理數(shù)字中很多0的情況,每次循環(huán)去掉一個(gè)漢字“零” if ($m == '零元' || $m == '零萬(wàn)' || $m == '零億' || $m == '零零') { $left = substr($c, 0, $j); $right = substr($c, $j + 3); $c = $left . $right; $j = $j-3; $slen = $slen-3; } $j = $j + 3; } //這個(gè)是為了去掉類似23.0中最后一個(gè)“零”字 if (substr($c, strlen($c)-3, 3) == '零') { $c = substr($c, 0, strlen($c)-3); } //將處理的漢字加上“整” if (empty($c)) { return "零元整"; }else{ return $c . "整"; } } echo num_to_rmb(23000000.00); //貳仟叁佰萬(wàn)元整
代碼三:
<?php //先貼一個(gè)數(shù)字轉(zhuǎn)中文的,最多12位數(shù) function convert_2_cn($num) { $convert_cn = array("零","壹","貳","叁","肆","伍","陸","柒","捌","玖"); $repair_number = array('零仟零佰零拾零','萬(wàn)萬(wàn)','零仟','零佰','零拾'); $unit_cn = array("拾","佰","仟","萬(wàn)","億"); $exp_cn = array("","萬(wàn)","億"); $max_len = 12; $len = strlen($num); if($len > $max_len) { return 'outnumber'; } $num = str_pad($num,12,'-',STR_PAD_LEFT); $exp_num = array(); $k = 0; for($i=12;$i>0;$i--){ if($i%4 == 0) { $k++; } $exp_num[$k][] = substr($num,$i-1,1); } $str = ''; foreach($exp_num as $key=>$nums) { if(array_sum($nums)){ $str = array_shift($exp_cn) . $str; } foreach($nums as $nk=>$nv) { if($nv == '-'){continue;} if($nk == 0) { $str = $convert_cn[$nv] . $str; } else { $str = $convert_cn[$nv].$unit_cn[$nk-1] . $str; } } } $str = str_replace($repair_number,array('萬(wàn)','億','-'),$str); $str = preg_replace("/-{2,}/","",$str); $str = str_replace(array('零','-'),array('','零'),$str); return $str; } echo convert_2_cn(1111)."\n"; echo convert_2_cn(111111)."\n"; echo convert_2_cn(111111111111)."\n"; //補(bǔ)充一個(gè)中文轉(zhuǎn)數(shù)字的 function cn_2_num($str){ $convert_cn = array("零","壹","貳","叁","肆","伍","陸","柒","捌","玖"); $skip_words = array("拾","佰","仟"); $str = str_replace($skip_words,"",$str); $len = mb_strlen($str,'utf-8'); $num = 0; $k = ''; for($i=0;$i<$len;$i++) { $cn = mb_substr($str,$i,1,'utf-8'); if($cn == '億') { $num = $num + intval($k)*100000000; $k = ''; } elseif($cn == '萬(wàn)') { $num = $num + intval($k)*10000; $k = ''; } else { $k = $k . array_search($cn,$convert_cn); } } if($k) { $num = $num + intval($k); } return $num; } echo cn_2_num('壹仟壹佰壹拾壹億壹仟壹佰壹拾壹萬(wàn)壹仟壹佰壹拾壹')."\n"; echo cn_2_num('拾壹萬(wàn)壹仟壹佰壹拾壹')."\n"; ?>
代碼四:
function convertCurrency(currencyDigits) { // Constants: var MAXIMUM_NUMBER = 99999999999.99; // Predefine the radix characters and currency symbols for output: var CN_ZERO = "零"; var CN_ONE = "壹"; var CN_TWO = "貳"; var CN_THREE = "叁"; var CN_FOUR = "肆"; var CN_FIVE = "伍"; var CN_SIX = "陸"; var CN_SEVEN = "柒"; var CN_EIGHT = "捌"; var CN_NINE = "玖"; var CN_TEN = "拾"; var CN_HUNDRED = "佰"; var CN_THOUSAND = "仟"; var CN_TEN_THOUSAND = "萬(wàn)"; var CN_HUNDRED_MILLION = "億"; var CN_SYMBOL = "人民幣"; var CN_DOLLAR = "元"; var CN_TEN_CENT = "角"; var CN_CENT = "分"; var CN_INTEGER = "整"; // Variables: var integral; // Represent integral part of digit number. var decimal; // Represent decimal part of digit number. var outputCharacters; // The output result. var parts; var digits, radices, bigRadices, decimals; var zeroCount; var i, p, d; var quotient, modulus; // Validate input string: currencyDigits = currencyDigits.toString(); if (currencyDigits == "") { alert("Empty input!"); return ""; } if (currencyDigits.match(/[^,.\d]/) != null) { alert("Invalid characters in the input string!"); return ""; } if ((currencyDigits).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) { alert("Illegal format of digit number!"); return ""; } // Normalize the format of input digits: currencyDigits = currencyDigits.replace(/,/g, ""); // Remove comma delimiters. currencyDigits = currencyDigits.replace(/^0+/, ""); // Trim zeros at the beginning. // Assert the number is not greater than the maximum number. if (Number(currencyDigits) > MAXIMUM_NUMBER) { alert("Too large a number to convert!"); return ""; } // http://www.knowsky.com/ Process the coversion from currency digits to characters: // Separate integral and decimal parts before processing coversion: parts = currencyDigits.split("."); if (parts.length > 1) { integral = parts[0]; decimal = parts[1]; // Cut down redundant decimal digits that are after the second. decimal = decimal.substr(0, 2); } else { integral = parts[0]; decimal = ""; } // Prepare the characters corresponding to the digits: digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT,CN_NINE); radices = new Array("", CN_TEN, CN_HUNDRED, CN_THOUSAND); bigRadices = new Array("", CN_TEN_THOUSAND, CN_HUNDRED_MILLION); decimals = new Array(CN_TEN_CENT, CN_CENT); // Start processing: outputCharacters = ""; // Process integral part if it is larger than 0: if (Number(integral) > 0) { zeroCount = 0; for (i = 0; i < integral.length; i++) { p = integral.length - i - 1; d = integral.substr(i, 1); quotient = p / 4; modulus = p % 4; if (d == "0") { zeroCount++; } else { if (zeroCount > 0) { outputCharacters += digits[0]; } zeroCount = 0; outputCharacters += digits[Number(d)] + radices[modulus]; } if (modulus == 0 && zeroCount < 4) { outputCharacters += bigRadices[quotient]; } } outputCharacters += CN_DOLLAR; } // Process decimal part if there is: if (decimal != "") { for (i = 0; i < decimal.length; i++) { d = decimal.substr(i, 1); if (d != "0") { outputCharacters += digits[Number(d)] + decimals[i]; } } } // Confirm and return the final output string: if (outputCharacters == "") { outputCharacters = CN_ZERO + CN_DOLLAR; } if (decimal == "") { outputCharacters += CN_INTEGER; } //outputCharacters = CN_SYMBOL + outputCharacters; outputCharacters = outputCharacters; return outputCharacters; }// var stmp = ""; function nst_convert(t) { if(t.value==stmp) return;//如果等于上次輸入則返回 var ms = t.value.replace(/[^\d\.]/g,"").replace(/(\.\d{2}).+$/,"$1").replace(/^0+([1-9])/,"$1").replace(/^0+$/,"0"); //replace(/[^\d\.]/g,"")去掉輸入當(dāng)中不是數(shù)字和.的字符 //replace(/(\.\d{2}).+$/,"$1") //匹配從字符開始的第一個(gè).后面的所有字符,由于沒有使用g標(biāo)記, //所以只匹配開始第一次 然后用小數(shù)點(diǎn)和后兩位進(jìn)行替換以確定數(shù)值最后的格式正確 高. //replace(/^0+([1-9])/,"$1") 匹配以多個(gè)0開頭的數(shù)值替換為去掉0后的數(shù)值做為數(shù)字的第一位 也是匹配開始的一次. //replace(/^0+$/,"0") 匹配以0開始和結(jié)束的多個(gè)0為一個(gè)0 也就是0000000 輸入->轉(zhuǎn)換成一個(gè)0 //以下確定輸入的為過(guò)濾后的合法數(shù)字 //alert(ms); var txt = ms.split("."); //alert(txt[0]); //如果ms值不小數(shù)點(diǎn)存在則txt[0]=小數(shù)點(diǎn)前的值否則等于ms //regexp:/\d{4}(,|$)/ 匹配四位數(shù)字和,的集合或者四位數(shù)字和字符結(jié)尾的集合 while(/\d{4}(,|$)/.test(txt[0]))//如果為txt[0]=4123 txt[0] = txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2"); //txt[0].replace(/(\d)(\d{3}(,|$))/,"$1,$2")是將txt[0]進(jìn)行替換后再賦給它 //regexp:/(\d)(\d{3}(,|$))/ 將四個(gè)數(shù)字份為兩組第一個(gè)數(shù)字為第一位,后三位和其他結(jié)尾為每二位 //并替換成 第一位,第二位 注意 ,的使用很好. 也就是將4123先替換成4,123 //由于此表達(dá)式默認(rèn)采用貪婪匹配所以從數(shù)值后向前匹配再通過(guò)循環(huán)進(jìn)行再匹配替換從而可以將 //12345678分成你想要的123,456,78 彩用(,|$)很精典,因?yàn)樗匀チ说诙纹ヅ鋾r(shí)的,問題 t.value = stmp = txt[0]+(txt.length>1?"."+txt[1]:""); //最終賦值到輸入框中 //如果有小數(shù)點(diǎn)則加上并購(gòu)成最終數(shù)字否則顯示替換后的txt[0] bbb.value = convertCurrency(ms-0); //將ms轉(zhuǎn)換為數(shù)字送到number2num1去轉(zhuǎn)換 }
以上所述就是本文的全部?jī)?nèi)容了,希望大家能夠喜歡。
您可能感興趣的文章:
- 編寫PHP程序檢查字符串中的中文字符個(gè)數(shù)的實(shí)例分享
- php阿拉伯?dāng)?shù)字轉(zhuǎn)中文人民幣大寫
- php封裝好的人民幣數(shù)值轉(zhuǎn)中文大寫類
- php實(shí)現(xiàn)過(guò)濾字符串中的中文和數(shù)字實(shí)例
- php支持中文字符串分割的函數(shù)
- php的GD庫(kù)imagettftext函數(shù)解決中文亂碼問題
- 多個(gè)PHP中文字符串截取函數(shù)
- PHP中文處理 中文字符串截取(mb_substr)和獲取中文字符串字?jǐn)?shù)
- php中計(jì)算中文字符串長(zhǎng)度、截取中文字符串的函數(shù)代碼
- php簡(jiǎn)單統(tǒng)計(jì)在線人數(shù)的方法
- PHP使用redis實(shí)現(xiàn)統(tǒng)計(jì)緩存mysql壓力的方法
- php精確的統(tǒng)計(jì)在線人數(shù)的方法
- php簡(jiǎn)單統(tǒng)計(jì)中文個(gè)數(shù)的方法
相關(guān)文章
你應(yīng)該知道的PHP+MySQL分頁(yè)那點(diǎn)事
你應(yīng)該知道的PHP+MySQL分頁(yè)那點(diǎn)事,這篇文章主要為大家詳細(xì)介紹了PHP+MySQL分頁(yè)技術(shù),為大家提供了完整php分頁(yè)實(shí)例,感興趣的小伙伴們可以參考一下2016-08-08關(guān)于WordPress的SEO優(yōu)化相關(guān)的一些PHP頁(yè)面腳本技巧
這篇文章主要介紹了關(guān)于WordPress的SEO優(yōu)化相關(guān)的一些PHP頁(yè)面腳本技巧,包括區(qū)分顯示頁(yè)面標(biāo)題和關(guān)鍵字等,需要的朋友可以參考下2015-12-12PHP中的print_r 與 var_dump 輸出數(shù)組
下面小編就為大家?guī)?lái)一篇PHP中的print_r 與 var_dump 輸出數(shù)組。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考2016-06-06PHP函數(shù)checkdnsrr用法詳解(Windows平臺(tái)用法)
這篇文章主要介紹了PHP函數(shù)checkdnsrr用法,分析講解了在Windows平臺(tái)使用checkdnsrr函數(shù)的方法,需要的朋友可以參考下2016-03-03php 智能404跳轉(zhuǎn)代碼,適合換域名沒改變目錄的網(wǎng)站
適合于換域名,但是目錄沒有改變的網(wǎng)站.也可以用做301定向.轉(zhuǎn)自于落伍,收集過(guò)來(lái).怕以后需要.需要的兄弟直接copy過(guò)去即可.2010-06-06