共享一个人民币大小写转换函数(PHP版)

microfire 2003-11-10 01:04:14
程序中难免有不妥之处,敬请各位指正.
...全文
226 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
microfire 2003-11-12
  • 打赏
  • 举报
回复
整数部分精确到14位就有问题了,小数部分的最后一位会有偏差,如12345678901234.99会变成
12345678901234.98了,不知道是不是跟php.ini中的 precision 设置有关,

请各路高手赐教...
AgathaZ 2003-11-11
  • 打赏
  • 举报
回复
good!
xinyaoxp 2003-11-11
  • 打赏
  • 举报
回复
good!
loswing 2003-11-11
  • 打赏
  • 举报
回复
mark .
up!
cn0cn 2003-11-10
  • 打赏
  • 举报
回复
up!~test ok!
microfire 2003-11-10
  • 打赏
  • 举报
回复
烦劳各位在其他平台测试一下,在此先行谢过
tuoshi 2003-11-10
  • 打赏
  • 举报
回复
make & up
microfire 2003-11-10
  • 打赏
  • 举报
回复
感谢 xuzuning(唠叨)
现修改如下:

<?php
function rmb_convert($rmb)
{
if(!empty($rmb)&&is_numeric($rmb)
&&strlen($rmb_tmp=sprintf("%01.2f",$rmb))<=16)
{
$conv_tb=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
,"i"=>"亿","w"=>"万","q"=>"仟","b"=>"佰","s"=>"拾"
,"y"=>"元","j"=>"角","f"=>"分","z"=>"整");
list($rmb_zs,$rmb_xs)=explode('.',$rmb_tmp);
$tmp=sprintf("%015s",$rmb_zs.$rmb_xs);
$str_tmp=$tmp[0]."w"
.$tmp[1]."q".$tmp[2]."b".$tmp[3]."s".$tmp[4]."i"
.$tmp[5]."q".$tmp[6]."b".$tmp[7]."s".$tmp[8]."w"
.$tmp[9]."q".$tmp[10]."b".$tmp[11]."s".$tmp[12]."y"
.$tmp[13]."j".$tmp[14]."f";
$rslt_tmp="";
for($str_pos=0;$str_pos<=strlen($str_tmp);$str_pos++)
{
if(is_numeric($str_tmp[$str_pos]))
{
if($str_tmp[$str_pos]!=0)
$rslt_tmp.=$str_tmp[$str_pos].$str_tmp[$str_pos+1];
else
{
if(!empty($rslt_tmp))
{
if(($str_tmp[$str_pos+1]=='i'||$str_tmp[$str_pos+1]=='w'||
$str_tmp[$str_pos+1]=='y')
&&$rslt_tmp[strlen($rslt_tmp)-1]!='i')
$rslt_tmp.=$str_tmp[$str_pos+1];
elseif($str_tmp[$str_pos+2]!=0)
$rslt_tmp.="0";
}
}
}
}
if(!empty($rslt_tmp))
$rslt_tmp.='z';
else
echo "参数错误!";
$rslt="";
for($pos=0;$pos<=strlen($rslt_tmp);$pos++)
{
$rslt.=$conv_tb[$rslt_tmp[$pos]];
}
return $rslt;
}
else
{
echo "参数错误!";
}
}

echo rmb_convert(9999999999999.99);
//玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分整

echo rmb_convert(09999999999999);
//参数错误!

echo rmb_convert(9999999999999);
//玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元整

echo rmb_convert(9999999999999.999);
//参数错误!

echo rmb_convert(0.0049);
//参数错误!

echo rmb_convert(.0051);
//壹分整

echo rmb_convert("70909060807.01");
//柒佰零玖亿零玖佰零陆万零捌佰零柒元零壹分整

echo rmb_convert("70909060-807.01");
//参数错误!

echo rmb_convert(7000000000007.01);
//柒万亿零柒元零壹分整
?>
feyge 2003-11-10
  • 打赏
  • 举报
回复
mark
xuzuning 2003-11-10
  • 打赏
  • 举报
回复
echo rmb_convert("70000000007.01");
//输出 柒佰亿万零柒元零壹分整
应该输出:
柒佰亿零柒元零壹分整

柒佰亿柒元零壹分整
microfire 2003-11-10
  • 打赏
  • 举报
回复
希望各位能将对该函数的相关修改告知在下.
microfire 2003-11-10
  • 打赏
  • 举报
回复
<?php
/****************************** 相关说明 ***************************
函数功能: 人民币小写=>大写转换.
测试环境: Win2K svr, Apache 2.0.47, php 4.3.3 .
参 数: 0.01 <= $rmb <= 9999999999999.99,小数点后保留两位有效位,
超过两位按四舍五入计.参数可以是 int,float 或 string 类型.
E-mail : mfsdev@tom.com
*******************************************************************/
function rmb_convert($rmb)
{
if(!empty($rmb)&&is_numeric($rmb)
&&strlen($rmb_tmp=sprintf("%01.2f",$rmb))<=16)
{
$conv_tb=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖"
,"i"=>"亿","w"=>"万","q"=>"仟","b"=>"佰","s"=>"拾"
,"y"=>"元","j"=>"角","f"=>"分","z"=>"整");
list($rmb_zs,$rmb_xs)=explode('.',$rmb_tmp);
$tmp=sprintf("%015s",$rmb_zs.$rmb_xs);
$str_tmp=$tmp[0]."w"
.$tmp[1]."q".$tmp[2]."b".$tmp[3]."s".$tmp[4]."i"
.$tmp[5]."q".$tmp[6]."b".$tmp[7]."s".$tmp[8]."w"
.$tmp[9]."q".$tmp[10]."b".$tmp[11]."s".$tmp[12]."y"
.$tmp[13]."j".$tmp[14]."f";
$rslt_tmp="";
for($str_pos=0;$str_pos<=strlen($str_tmp);$str_pos++)
{
if(is_numeric($str_tmp[$str_pos]))
{
if($str_tmp[$str_pos]!=0)
$rslt_tmp.=$str_tmp[$str_pos].$str_tmp[$str_pos+1];
else
{
if(!empty($rslt_tmp))
{
if($str_tmp[$str_pos+1]=='i'||$str_tmp[$str_pos+1]=='w'||
$str_tmp[$str_pos+1]=='y')
$rslt_tmp.=$str_tmp[$str_pos+1];
elseif($str_tmp[$str_pos+2]!=0)
$rslt_tmp.="0";
}
}
}
}
if(!empty($rslt_tmp))
$rslt_tmp.='z';
else
echo "参数错误!";
$rslt="";
for($pos=0;$pos<=strlen($rslt_tmp);$pos++)
{
$rslt.=$conv_tb[$rslt_tmp[$pos]];
}
return $rslt;
}
else
{
echo "参数错误!";
}
}

echo rmb_convert(9999999999999.99);
//玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分整

echo rmb_convert(09999999999999);
//参数错误!

echo rmb_convert(9999999999999);
//玖万玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元整

echo rmb_convert(9999999999999.999);
//参数错误!

echo rmb_convert(0.0049);
//参数错误!

echo rmb_convert(.0051);
//壹分整

echo rmb_convert("70909060807.01");
//柒佰零玖亿零玖佰零陆万零捌佰零柒元零壹分整

echo rmb_convert("70909060-807.01");
//参数错误!
?>

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧