php 数字转换成英文显示
数字转换成英文显示
调用方法
$price = 111113114;
echo umoney($price);
//输出结果
//one hundred eleven million, one hundred thirteen thousand, one hundred fourteen
//define
//格式化货币
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);
}
function umoney($num,$type=”usd”) {
global $numTable,$commaTable,$moneyType;
//global $numTable;
$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]=”milliard “;
$commaTable[4]=”billion “;
$commaTable[5]=”????? “;
//单位
$moneyType[“usd”]=”DOLLARS “;//美元
$moneyType[“usd_1″]=”CENTS ONLY”;//带有角分
$moneyType[“rmb”]=”YUAN “;//人民币
$moneyType[“rmb_1″]=”FEN ONLY”;
if($type==””) $type=”usd”;
$fnum = $this->fmoney($num);//转换成货币格式
$numArray = explode(“,”,$fnum);
$resultArray = array();
$k=0;
$cc=count($numArray);
for($i = 0; $i < count($numArray); $i++) {
$num_str = $numArray[$i];
//echo "
“;
//小数位的处理400.21
if(eregi(“\.”,$num_str)) {
$dotArray = explode(“.”,$num_str);
if($dotArray[1] != 0) {
$resultArray[$k++]=$this->format3num($dotArray[0]+0);
//$resultArray[$k++]=$moneyType[strtolower($type)];
$resultArray[$k++]=” “;
$resultArray[$k++]=$this->format3num($dotArray[1]+0);
//$resultArray[$k++]=$moneyType[strtolower($type).”_1”];
} else {
$resultArray[$k++]=$this->format3num($dotArray[0]+0);
//$resultArray[$k++]=$moneyType[strtolower($type)];
}
} else {
//非小数位的处理
if(($num_str+0)!=0) {
$resultArray[$k++]=$this->format3num($num_str+0);
$resultArray[$k++]=$commaTable[–$cc];
//判断:除小数外其余若不为零则加and
for($j=$i; $j < = $cc; $j++) {
//echo "
“;
//echo $numArray[$j];
if($numArray[$j] !=0) {
$resultArray[$k++]=” “;
break;
}
}
}
}
}
return join(“”,$resultArray);
}
function format3num($num) {
global $numTable,$commaTable;
$numlen = strlen($num);
for($i = 0,$j = 0;$i < $numlen; $i++) {
$bitenum[$j++] = substr($num,$i,1);
}
if($num==0) return "";
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].$numTable[$bitenum[2]];
} elseif ($bitenum[2]==0) {
//120
return $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[1]*10];
} else {
//123
if($bitenum[1].$bitenum[2] <= 20){
return $numTable[$bitenum[0]].$commaTable[0].$numTable[$bitenum[1].$bitenum[2]];
}else{
return $numTable[$bitenum[0]].$commaTable[0].trim($numTable[$bitenum[1]*10])."-".$numTable[$bitenum[2]];
}
}
}
return $num;
}
标签:PHP