您好,登錄后才能下訂單哦!
本篇文章為大家展示了php項(xiàng)目中的金額數(shù)字怎么裝換為中文大寫(xiě),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
php將金額數(shù)字轉(zhuǎn)化為中文大寫(xiě)
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)換成中文大寫(xiě)金額的函數(shù) *String Int $num 要轉(zhuǎn)換的小寫(xiě)數(shù)字或小寫(xiě)字符串 *return 大寫(xiě)字母 *小數(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") //匹配從字符開(kāi)始的第一個(gè).后面的所有字符,由于沒(méi)有使用g標(biāo)記, //所以只匹配開(kāi)始第一次 然后用小數(shù)點(diǎn)和后兩位進(jìn)行替換以確定數(shù)值最后的格式正確 高. //replace(/^0+([1-9])/,"$1") 匹配以多個(gè)0開(kāi)頭的數(shù)值替換為去掉0后的數(shù)值做為數(shù)字的第一位 也是匹配開(kāi)始的一次. //replace(/^0+$/,"0") 匹配以0開(kāi)始和結(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í)的,問(wèn)題 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)換 }
上述內(nèi)容就是php項(xiàng)目中的金額數(shù)字怎么裝換為中文大寫(xiě),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。