Please enable java script to visit.
NOTEBOOK
HOMEPHP / MySQLJS / HTMLWXappPythonC++Blender其他
PHP 数字金额转英文大写、转中文大写 - NOTEBOOK
PHP 数字金额转英文大写、转中文大写
PHP / MySQL
Posted on 2022-12-23
摘要 : 自动将数字金额转英文大写、转中文大写。
例如:1220.21
壹仟贰百贰拾元贰角壹分
ONE THOUSAND AND TWO HUNDRED TWENTY DOLLARS AND TWENTY-ONE CENTS ONLY
❱ 数字转中文大写!设置可以保留小数点几位数

// 数字转中文大写!设置可以保留小数点几位数
function cn_big_num($data){
$capnum=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
$capdigit=array('',"拾","佰","仟");
$subdata=explode('.',$data);
$yuan=$subdata[0];
$j=0; $nonzero=0;
for($i=0;$i<strlen($subdata[0]);$i++){
if(0==$i){ // 确定个位
if($subdata[1]){
$cncap=(substr($subdata[0],-1,1)!=0)?"元":"零元";
}else{
$cncap="元";
}
}
if(4==$i){ $j=0; $nonzero=0; $cncap="万".$cncap; } // 确定万位
if(8==$i){ $j=0; $nonzero=0; $cncap="亿".$cncap; } // 确定亿位
$numb=substr($yuan,-1,1); // 截取尾数
$cncap=($numb)?$capnum[$numb].$capdigit[$j].$cncap : (($nonzero)?"零".$cncap:$cncap);
$nonzero=($numb)?1:$nonzero;
$yuan=substr($yuan,0,strlen($yuan)-1); // 截去尾数
$j++;
}

if($subdata[1]){
$chiao=(substr($subdata[1],0,1))?$capnum[substr($subdata[1],0,1)]."角":"零";
$cent=(substr($subdata[1],1,1))?$capnum[substr($subdata[1],1,1)]."分":"零分";
}
$cncap .= $chiao.$cent." 整";
$cncap=preg_replace("/()+/","\\1",$cncap); // 合并连续 零
$cncap =str_replace('零分','',$cncap);
return $cncap;
}





❱ 数字转英文大写

// 如何使用:
// $num=1220.21;
// echo fmoney($num);
// 结果:1,220.21
// echo en_big_num($num);
// 结果:ONE THOUSAND AND TWO HUNDRED TWENTY DOLLARS AND TWENTY-ONE CENTS ONLY
// echo en_big_num($num,"cny");
// 结果:ONE THOUSAND AND TWO HUNDRED TWENTY YUAN AND TWENTY-ONE FEN ONLY
// define
$numTable[0]="ZERO ";$numTable[1]="ONE ";$numTable[2]="TWO ";$numTable[3]="THREE ";$numTable[4]="FOUR ";$numTable[5]="FIVE ";$numTable[6]="SIX ";$numTable[7]="SEVEN ";$numTable[8]="EIGHT ";$numTable[9]="NINE ";$numTable[10]="TEN ";$numTable[11]="ELEVEN ";$numTable[12]="TWELVE ";$numTable[13]="THIRTEEN ";$numTable[14]="FOURTEEN ";$numTable[15]="FifTEEN ";$numTable[16]="SIXTEEN ";$numTable[17]="SEVENTEEN ";$numTable[18]="EIGHTEEN ";$numTable[19]="NINETEEN ";$numTable[20]="TWENTY ";$numTable[30]="THIRTY ";$numTable[40]="forTY ";$numTable[50]="FifTY ";$numTable[60]="SIXTY ";$numTable[70]="SEVENTY ";$numTable[80]="EIGHTY ";$numTable[90]="NINETY ";
$commaTable[0]="HUNDRED ";$commaTable[1]="THOUSAND ";$commaTable[2]="MILLION ";$commaTable[3]="BILLION ";$commaTable[4]="TRILLION";$commaTable[5]="????? ";
// 单位
$moneyType["usd"]="US.DOLLAR ";$moneyType["usd_1"]="CENTS ONLY";$moneyType["usds"]="US.DOLLARS ";$moneyType["usds_1"]="CENTS ONLY";
$moneyType["cny"]="YUAN ";$moneyType["cny_1"]="FEN ONLY";$moneyType["cnys"]="YUAN ";$moneyType["cnys_1"]="FEN ONLY";
$moneyType["hkd"]="HK.DOLLAR ";$moneyType["hkd_1"]="CENTS ONLY";$moneyType["hkds"]="HK.DOLLARS ";$moneyType["hkds_1"]="CENTS ONLY";
$moneyType["eur"]="EURO ";$moneyType["eur_1"]="CENTS ONLY";$moneyType["eurs"]="EUROS ";$moneyType["eurs_1"]="CENTS ONLY";
$moneyType["gbp"]="POUND ";$moneyType["gbp_1"]="PENCE ONLY";$moneyType["gbps"]="POUNDS ";$moneyType["gbps_1"]="PENCE ONLY";
$moneyType["twd"]="NT.DOLLAR ";$moneyType["twd_1"]="CENTS ONLY";$moneyType["twds"]="NT.DOLLARS ";$moneyType["twds_1"]="CENTS ONLY";
$moneyType["sgd"]="SG.DOLLAR ";$moneyType["sgd_1"]="CENTS ONLY";$moneyType["sgds"]="SG.DOLLARS ";$moneyType["sgds_1"]="CENTS ONLY";
$moneyType["jpy"]="YEN ";$moneyType["jpy_1"]="SEN ONLY";$moneyType["jpys"]="YEN ";$moneyType["jpys_1"]="SEN ONLY";





function en_big_num($numm,$type="usd") {
global $numTable,$commaTable,$moneyType;
if($numm>2){$type=$type."S";} elseif($numm<=2){$type=$type;}
$fnum = fmoney($numm);
$numArray = explode(",",$fnum);
$resultArray = array();
$k=0;
$cc=count($numArray);
for($i = 0; $i < count($numArray); $i++) {
$num_str = $numArray[$i];
// echo "<br>";
// 小数位的处理400.21
// if(eregi("\.",$num_str)) { // preg_match
if(preg_match("/\./",$num_str)) { // preg_match
$dotArray = explode('.',$num_str);
if($dotArray[1] != 0) {
$resultArray[$k++]=@format3num($dotArray[0]+0,$numm);
$resultArray[$k++]=$moneyType[strtolower($type)];
$resultArray[$k++]="AND ";
$resultArray[$k++]=@format3num($dotArray[1]+0,$numm);
$resultArray[$k++]=$moneyType[strtolower($type)."_1"];
} else {
$resultArray[$k++]=@format3num($dotArray[0]+0,$numm);
$resultArray[$k++]=$moneyType[strtolower($type)];
}
} else {
// 非小数位的处理
if(($num_str+0)!=0) {
$resultArray[$k++]=@format3num($num_str+0);
$resultArray[$k++]=$commaTable[--$cc];
}
}
}
return join('',$resultArray);
}
// en_big_num 的 子函数
// 格式化货币
function fmoney($num) {
$num=0+$num;
$num = sprintf("%.02f",$num);
if(strlen($num) <= 6) return $num;
// 从最后开始算起,每3个数它加一个","
for($i=strlen($num)-1,$k=1, $j=100; $i >= 0; $i--,$k++) {
$one_num = substr($num,$i,1);
if($one_num =='.') {
$numArray[$j--] = $one_num;
$k=0;
continue;
}
if($k%3==0 and $i!=0) {
// 如果正好只剩下3个数字,则不加','
$numArray[$j--] = $one_num;
$numArray[$j--] = ",";
$k=0;
} else {
$numArray[$j--]=$one_num;
}
}
ksort($numArray);
return join('',$numArray);
}
// en_big_num 的 子函数
function format3num($num,$numm) {
global $numTable,$commaTable;
$numlen = strlen($num);
for($i = 0,$j = 0;$i < $numlen; $i++) {
$bitenum[$j++] = substr($num,$i,1);
}
if($num==0 && $numm > 1000) return '';
if($num==0 && $numm < 1000) return $numTable[$num];
if($numlen == 1) return $numTable[$num];
if($numlen == 2) {
if($num <= 20) return $numTable[$num];
// 第一位不可能零
if($bitenum[1]==0) {
return $numTable[$num];
} else {
return trim($numTable[$bitenum[0]*10])."-".$numTable[$bitenum[1]];
}
}
// 第一个不可能为零
if($numlen == 3) {
if($bitenum[1]==0 && $bitenum[2]==0) {
// 100
return $numTable[$bitenum[0]].$commaTable[0];
} elseif($bitenum[1]==0) {
// 102
return $numTable[$bitenum[0]].$commaTable[0]." AND ".$numTable[$bitenum[2]];
} elseif ($bitenum[2]==0) {

// 120
return $numTable[$bitenum[0]].$commaTable[0]." AND ".$numTable[$bitenum[1]*10];
} elseif(($bitenum[1]==1 )){
// 11x
return $numTable[$bitenum[0]].$commaTable[0]." AND ".$numTable[$bitenum[1].$bitenum[2]];
}else {
// 123
return $numTable[$bitenum[0]].$commaTable[0]." AND ".trim($numTable[$bitenum[1]*10])."-".$numTable[$bitenum[2]];
}
}
return $num;
}