溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php項(xiàng)目中的金額數(shù)字怎么裝換為中文大寫(xiě)

發(fā)布時(shí)間:2020-12-10 14:33:02 來(lái)源:億速云 閱讀:141 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

本篇文章為大家展示了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)元整

代碼三:

<&#63;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";  
&#63;>

代碼四:

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}))&#63;)|(\d+(.\d+)&#63;))$/) == 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&#63;"."+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è)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI