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


Posted in PHP onOctober 09, 2006

有没有想过将数字格式的计算结果转化为汉字格式的? 有人会问"干嘛要转, 数字形式不是蛮好嘛", 可是当这个数字很长的时候就不太容易读出来了吧, 就算是有千分位的分隔符也不易顺口说出, 因为这个符号是位英语行方便的, 不是适合我们的读法. 那就自己写一个函数来完成这项任务吧.

将下列代码加到你的网页里, 通过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));

PHP 相关文章推荐
php数组相加 array(“a”)+array(“b”)结果还是array(“a”)
Sep 19 PHP
php的sprintf函数的用法 控制浮点数格式
Feb 14 PHP
Linux下PHP连接Oracle数据库
Aug 20 PHP
wamp安装后自定义配置的方法
Aug 23 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
PHP文件上传之多文件上传的实现思路
Jan 27 PHP
PHP5.3新特性小结
Feb 14 PHP
yii gridview实现时间段筛选功能
Aug 15 PHP
php实现文章评论系统
Feb 18 PHP
PHP7内核CGI与FastCGI详解
Apr 14 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 PHP
透析PHP的配置文件php.ini
Oct 09 #PHP
一个简单的自动发送邮件系统(三)
Oct 09 #PHP
一个简单的自动发送邮件系统(一)
Oct 09 #PHP
一个简单的自动发送邮件系统(二)
Oct 09 #PHP
通过html表格发电子邮件
Oct 09 #PHP
在 PHP 中使用随机数的三个步骤
Oct 09 #PHP
用PHP制作静态网站的模板框架(四)
Oct 09 #PHP
You might like
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
原生JS实现LOADING效果
2015/03/16 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
基于jQuery实现仿百度首页选项卡切换效果
2016/05/29 Javascript
AngularJS ng-bind-html 指令详解及实例代码
2016/07/30 Javascript
JavaScript实现点击按钮复制指定区域文本(推荐)
2016/11/25 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
小程序开发踩坑:页面窗口定位(相对于浏览器定位)(推荐)
2019/04/25 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
js实现随机点名
2021/01/19 Javascript
Python类的基础入门知识
2008/11/24 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
用Python实现随机森林算法的示例
2017/08/24 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Pyspark获取并处理RDD数据代码实例
2020/03/27 Python
python可迭代对象去重实例
2020/05/15 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
英国著名的药妆网站:Escentual
2016/07/29 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
几个人围成一圈的问题
2013/09/26 面试题
公务员总结性个人自我评价
2013/12/05 职场文书
揭牌仪式主持词
2014/03/19 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
教师岗位职责范本
2015/04/02 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
如何利用python创作字符画
2022/06/25 Python