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


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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
php auth_http类库进行身份效验
Mar 19 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
destoon之一键登录设置
Jun 21 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
php获取远程文件大小
Oct 20 PHP
关于php 高并发解决的一点思路
Apr 16 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
Oct 19 PHP
php中错误处理操作实例分析
Aug 23 PHP
Laravel ORM 数据model操作教程
Oct 21 PHP
详解PHP中的8个魔术常量
Jul 06 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
php读取javascript设置的cookies的代码
2010/04/12 PHP
php自动加载的两种实现方法
2010/06/21 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
Laravel核心解读之异常处理的实践过程
2019/02/24 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
Avengerls vs KG BO3 第一场2.18
2021/03/10 DOTA
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
jQuery EasyUI API 中文文档 - MenuButton菜单按钮使用介绍
2011/10/06 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
js点击页面其它地方将某个显示的DIV隐藏
2012/07/12 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
javascript原始值和对象引用实例分析
2015/04/25 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
Javascript基础_标记文字的实现方法
2016/06/14 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
javascript中mouseenter与mouseover的异同
2017/06/06 Javascript
Vue官网todoMVC示例代码
2018/01/29 Javascript
jQuery中复合选择器简单用法示例
2018/03/31 jQuery
从vue源码看props的用法
2019/01/09 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
Python的标准模块包json详解
2017/03/13 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
医院保洁服务方案
2014/06/11 职场文书
幼师中班个人总结
2015/02/12 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
成绩单家长意见
2015/06/03 职场文书
银行岗位培训心得体会
2016/01/09 职场文书
golang fmt格式“占位符”的实例用法详解
2021/07/04 Golang
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL