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


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实现的随机广告显示代码
Jun 14 PHP
php设计模式 Command(命令模式)
Jun 26 PHP
PHP运行模式的深入理解
Jun 03 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
Dec 17 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 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
NOD32 v2.70.32 简体中文封装版 提供下载了
2007/02/27 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
Laravel实现定时任务的示例代码
2017/08/10 PHP
PHP实现的简单路由和类自动加载功能
2018/03/13 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
实现超用户体验 table排序javascript实现代码
2009/06/22 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
jQuery筛选器children()案例详解(图文)
2013/02/17 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
vue webuploader 文件上传组件开发
2017/09/23 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
Vue开发之watch监听数组、对象、变量操作分析
2019/04/25 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python中偏函数用法示例
2018/06/07 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
Python with关键字,上下文管理器,@contextmanager文件操作示例
2019/10/17 Python
python取均匀不重复的随机数方式
2019/11/27 Python
ASP.NET Core中的配置详解
2021/02/05 Python
实习生体会的自我评价范文
2013/11/28 职场文书
镇创先争优活动总结
2014/08/28 职场文书
2015年学校办公室工作总结
2015/05/26 职场文书
趣味运动会赞词
2015/07/22 职场文书
pytorch 实现变分自动编码器的操作
2021/05/24 Python