当前位置: 首页 > 图文教程 > 网络编程 > PHP > 将数字格式的计算结果转为汉字格式

PHP
《PHP设计模式介绍》第十三章 适配器模式
《PHP设计模式介绍》第十四章 动态记录模式
《PHP设计模式介绍》第十五章 表数据网关模式
《PHP设计模式介绍》第十六章 数据映射模式
《PHP设计模式介绍》第十七章 MVC 模式
Zend Framework 入门——快速上手
Zend Framework 入门——多国语言支持
Zend Framework 入门——错误处理
Zend Framework 入门——页面布局
详细介绍php5编程中的异常处理
PHP5 OOP编程中的代理与异常
PHP程序的常见漏洞攻击分析
PHP.MVC的模板标签系统
PHP教程:PHP编码书写规范
PHP开发大型项目的方法:OOP思想
php使用curl模拟用户登陆
php对gb编码动态转utf-8编码的几种方法评测
php设计模式介绍之章代理模式
“在phpMyAdmin使用用户口令登陆”补充
PHP入门速成

PHP 中的 将数字格式的计算结果转为汉字格式


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 255 ::
收藏到网摘: n/a

有没有想过将数字格式的计算结果转化为汉字格式的? 有人会问"干嘛要转, 数字形式不是蛮好嘛", 可是当这个数字很长的时候就不太容易读出来了吧, 就算是有千分位的分隔符也不易顺口说出, 因为这个符号是位英语行方便的, 不是适合我们的读法. 那就自己写一个函数来完成这项任务吧.
将下列代码加到你的网页里, 通过num2chi()函数的调用就可以实现上述功能了, 快来试一试吧. 为了各位能读懂这段代码, 在下特意加入详细注解, 还请老鸟们不要嫌罗唆, ^_^.
//----------------------FUNCTION BEGIN-----------------------------
//-------------------------------------------
//函数名: num2chi()
//叁 数: 一数字
//返回值: 一字符串
//功 能: 将难读的长串数字转为顺口读出的汉字
//作 者: chen.anson
//站 点: HTTP://dreamer.oso.com.cn
//-------------------------------------------
function num2chi(result) {
var chiresult = ""; //定义返回值叁数chiresult为字符形式
result = result.toString(); //将result转为字符形式
result = result.toLowerCase();
resultlen = result.length; //定义resultlen为result的长度
tempresult = result; //定义中间变量tempresult
for (i=1;i<=resultlen;i++) //将字符串tempresult中的全部数字替换为汉字
{
tempresult = tempresult.replace("1","一");
tempresult = tempresult.replace("2","二");
tempresult = tempresult.replace("3","三");
tempresult = tempresult.replace("4","四");
tempresult = tempresult.replace("5","五");
tempresult = tempresult.replace("6","六");
tempresult = tempresult.replace("7","七");
tempresult = tempresult.replace("8","八");
tempresult = tempresult.replace("9","九");
tempresult = tempresult.replace("0","零");
tempresult = tempresult.replace(".","点");
tempresult = tempresult.replace("e+","幂");
}
while(tempresult.indexOf("零零")!=-1) //避免字符串tempresult中出现"零零", 但又不能改变字符串长度
{
tempresult = tempresult.replace("零零","位零");
}
resultlen = tempresult.length; //再次确认tempresult的长度, 因"e+"->"幂"会引起长度变化
for (i=1,j=1,k=1;i<=resultlen;i++) //开始转换, i为位数确认叁数, j为"十百千"确认叁数, k为"万亿"确认叁数
{
//防止尾数为零, 如八拾零, 二拾零万
if (tempresult.charAt(resultlen-1)=="零"&&i==1)
chiresult = "位";
else if (tempresult.charAt(resultlen-i)=="零"&&j==1)
chiresult = "位" + chiresult;
//--------------------------------
//避免把"幂"和"点"当做实际位数, 而且单位确认变量重新计数
else if (tempresult.charAt(resultlen-i)=="幂")
{
j=1;k=1;chiresult = tempresult.charAt(resultlen-i) + chiresult;continue;
}
else if (tempresult.charAt(resultlen-i)=="点")
{
j=1;k=1;chiresult = tempresult.charAt(resultlen-i) + chiresult;continue;
}
//--------------------------------------
else
chiresult = tempresult.charAt(resultlen-i) + chiresult;
//添加数字单位
if (tempresult.charAt(resultlen-i-1)!="位"&&tempresult.charAt(resultlen-i-1)!="零"&&tempresult.charAt(resultlen-i-1)!="幂")
{
if (j==1&&i<resultlen) chiresult = "拾" + chiresult;
else if (j==2&&i<resultlen) chiresult = "百" + chiresult;
else if (j==3&&i<resultlen) chiresult = "千" + chiresult;
}
if (j==4&&i<resultlen) j=0;
if (k==4&&i<resultlen&&tempresult.charAt(resultlen-i-1)!="幂") chiresult = "万" + chiresult;
else if (k==8&&i<resultlen&&tempresult.charAt(resultlen-i-1)!="幂") {k=0;chiresult = "亿" + chiresult;}
//-----------
j++;k++;
}
while(chiresult.indexOf("位")!=-1) //避免字符串chiresult中出现"位"
{
chiresult = chiresult.replace("位","");
}
if (chiresult.substr(0,2)=="一拾") //避免出现"一拾二"等情况
chiresult = chiresult.substring(1,chiresult.length);
//幂和小数点後的数字应直接读出, 而没有单位
if (chiresult.search("幂")>=0&&chiresult.search("点")>=0)
{
rebegin = chiresult.substring(0,chiresult.indexOf("点"));
relast = chiresult.substring(chiresult.indexOf("幂"),chiresult.length);
remid = chiresult.substring(chiresult.indexOf("点"),chiresult.indexOf("幂"));
for (i=1;i<=remid.length;i++)
{
remid = remid.replace("拾","");
remid = remid.replace("百","");
remid = remid.replace("千","");
remid = remid.replace("万","");
remid = remid.replace("亿","");
}
chiresult = rebegin + remid + relast;
}
else if (chiresult.search("幂")<0&&chiresult.search("点")>=0)
{
rebegin = chiresult.substring(0,chiresult.indexOf("点"));
relast = chiresult.substring(chiresult.indexOf("点"),chiresult.length);
for (i=1;i<=relast.length;i++)
{
relast = relast.replace("拾","");
relast = relast.replace("百","");
relast = relast.replace("千","");
relast = relast.replace("万","");
relast = relast.replace("亿","");
}
chiresult = rebegin + relast;
}
if (chiresult.search("幂")>=0) //将"幂"替换为"乘以拾的", 这样可以直接读出
{
chiresult = chiresult.replace("幂","乘以拾的");
chiresult = chiresult + "次方";
}
return chiresult;
}
//----------------------FUNCTION END-------------------------------

将下面这两条语句放到script块中试运行一下看看结果对不对, 另外可以访问我的主页http://dreamer.oso.com.cn 在休闲广场里有一个彩票页面, 就是用这段代码实现的, 欢迎光临.
hi='4648000567542450084.16415846E+766600050';
document.write(hi+"<br>"+num2chi(hi));