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


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 相关文章推荐
dedecms中显示数字验证码的修改方法
Mar 21 PHP
请php正则走开
Mar 15 PHP
PHP中基本符号及使用方法
Mar 23 PHP
Windows7下PHP开发环境安装配置图文方法
May 20 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
php实现cookie加密的方法
Mar 10 PHP
PHP简单的MVC框架实现方法
Dec 01 PHP
php计划任务之验证是否有多个进程调用同一个job的方法
Dec 07 PHP
PHP微信分享开发详解
Jan 14 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 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 magic_quotes_gpc的一点认识与分析
2008/08/18 PHP
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
PHP设计模式之装饰器模式定义与用法简单示例
2018/08/13 PHP
php反射学习之依赖注入示例
2019/06/14 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
JavaScript的原型继承详解
2015/02/15 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
vue中引用阿里字体图标的方法
2018/02/10 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Python自动连接ssh的方法
2015/03/07 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Django基础之Model操作步骤(介绍)
2017/05/27 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
ubuntu上安装python的实例方法
2019/09/30 Python
django rest framework serializers序列化实例
2020/05/13 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
四风问题个人对照检查剖析材料
2014/09/27 职场文书
党风廉正建设责任书
2015/01/29 职场文书
护士求职自荐信范文
2015/03/04 职场文书
军训新闻稿范文
2015/07/17 职场文书
小学科学课教学反思
2016/02/23 职场文书
公司趣味运动会开幕词
2016/03/04 职场文书
python实现简单反弹球游戏
2021/04/12 Python
详解Html5项目适配系统深色模式方案总结
2021/04/14 HTML / CSS
Python matplotlib可视化之绘制韦恩图
2022/02/24 Python