大家好,现有个财务问题:如何自动显示对应的数字的中文名称呢?比如:
USD 53,621.35 如何做才能自动显示出: 美元伍万叁仟陆佰贰拾壹元叁角伍分
这个前面的币种和后面单个的数字可以用数组去对应,但这个分段出来的万啊仟啊佰啊的怎么弄哦??还有那个角分什么的...
@~@有弄过的指点下小弟...多谢各位了!
USD 53,621.35 如何做才能自动显示出: 美元伍万叁仟陆佰贰拾壹元叁角伍分
这个前面的币种和后面单个的数字可以用数组去对应,但这个分段出来的万啊仟啊佰啊的怎么弄哦??还有那个角分什么的...
@~@有弄过的指点下小弟...多谢各位了!
function num2ch($num)
{
if($num == '0') return '零';
$chs = array('0','壹','贰','叁','肆','伍','陆','柒','捌','玖');
$uni = array('','拾','佰','仟');
$exp = array('','万');
$num.= '';
$res = '';
for($i=strlen($num)-1,$k=0;$i>=0;$k++)
{
$str = '';
//按照中文读写习惯,每4个字为一段进行转化
for($j=0;$j<4 && $i>=0;$j++,$i--)
{
$u = $num{$i}>0? $uni[$j] : '';//非0的数字后面添加单位
$str = $chs[$num{$i}].$u.$str;
}
$str = preg_replace("/0+$/","",$str);//去掉末尾的0
$str = preg_replace("/0+/","零",$str);//替换0
if( !isset($exp[$k]) ) $exp[$k] = $exp[$k-2].'亿';//构建单位
$u2 = $str!=''? $exp[$k] : '';
$res = $str.$u2.$res;
}
return $res;
}
print_r(num2ch('53,621.35'));
这次ok了
<?php
function numberTocncap($data){
$capnum = array( "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" );
$capdigit = array( "", "拾", "佰", "仟" );
$subdata = explode( ".", $data );
$yuan = $subdata[0];
$j = 0;
$nonzero = 0;
for( $i=0; $i<strlen($subdata[0]); $i++ ){
if( $i==0 ){ //确定个位
if($subdata[1]){
$cncap = (substr($subdata[0],-1,1)!=0) ? "元" : "元零";
}else{
$cncap = "元";
}
}
if( $i==4 ){ //确定万位
$j = 0;
$nonzero = 0;
$cncap = "万" . $cncap;
}
if($i==8){ //确定亿位
$j = 0;
$nonzero = 0;
$cncap = "亿" . $cncap;
}
$numb = substr($yuan,-2,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); //合并连续"零"
return $cncap;
}print_r(numberTocncap('53,621.35'));伍万叁仟佰陆拾贰元叁角伍分
$_CHINESE=array('零','一','二','三','四','五','六','七','八','九');
$_UNIT = array('角', '分', '千', '百', '拾', '元', '万', '億', '万億');
function convertCurrency($num)
{
global $_CHINESE, $_UNIT;
$result = '';
$data = explode('.', str_replace(',', '', $num));
$int = str_pad($data[0], ceil(strlen($data[0]) / 4) * 4, '0', STR_PAD_LEFT);
$decimal = count($data) == 2 ? $data[1] : ''; $a = str_split($int, 4);
$i = count($a) - 1;
foreach($a as $v)
{
if (preg_match('/^0+$/', $v)) {
if ($i == 0) {
$result = trim($result, $_CHINESE[0]);
$result .= $_UNIT[$i + 5];
break;
}
$result .= $_CHINESE[0];
--$i;
continue;
}
$result .= convertInt($v) . $_UNIT[$i + 5];
--$i;
}
$result = trim($result.convertDecimal($decimal), $_CHINESE[0]);
$result = preg_replace('/('.preg_quote($_CHINESE[0]).')+/', $_CHINESE[0], $result);
return $result;
}
function convertInt($num)
{
global $_CHINESE, $_UNIT;
$t = $_CHINESE[($num / 1000) % 10] . (($num / 1000) % 10 == 0 ? '' : $_UNIT[2]);
if ($num % 1000 == 0) return $t;
$h = $_CHINESE[($num / 100) % 10] . (($num / 100) % 10 == 0 ? '' : $_UNIT[3]);
if ($num % 100 == 0) return $t.$h;
$n = $_CHINESE[($num / 10) % 10] . (($num / 10) % 10 == 0 ? '' : $_UNIT[4]);
if ($num % 10 == 0) return $t.$h.$n;
return $t.$h.$n . ($num % 10 == 0 ? '' : $_CHINESE[$num % 10]);
}function convertDecimal($decimal)
{
global $_CHINESE, $_UNIT;
$result = '';
if (strlen($decimal) > 0 && $decimal{0} > 0) {
$result .= $_CHINESE[$decimal{0}] . $_UNIT[0];
}
if (strlen($decimal) > 1 && $decimal{1} > 0) {
$result .= $_CHINESE[$decimal{1}] . $_UNIT[1];
}
return $result;
}echo convertCurrency('53,621.35') . '<br>';
echo convertCurrency('123,456,789') . '<br>';
echo convertCurrency('123,456,789.25') . '<br>';
echo convertCurrency('123,456,789.2') . '<br>';
echo convertCurrency('120,000,001.05') . '<br>';
echo convertCurrency('1,200,000,000,000') . '<br>';?>
五万三千六百二拾一元三角五分
一億二千三百四拾五万六千七百八拾九元
一億二千三百四拾五万六千七百八拾九元二角五分
一億二千三百四拾五万六千七百八拾九元二角
一億二千万零一元五分
一万億二千億元
你写的这个进制位会倒过来,不信你打印下,562会显示伍佰拾陆贰,我调整了下还是没有搞定...