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


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 相关文章推荐
模拟OICQ的实现思路和核心程序(三)
Oct 09 PHP
php5新改动之短标记启用方法
Sep 11 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
Jun 21 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
PHP和Shell实现检查SAMBA与NFS Server是否存在
Jan 07 PHP
PHP处理postfix邮件内容的方法
Jun 16 PHP
php实现多城市切换特效
Aug 09 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
关于PHP通用返回值设置方法
Mar 31 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php回调函数处理数组操作示例
Apr 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
DedeCms模板安装/制作概述
2007/03/11 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
从零开始学YII2框架(六)高级应用程序模板
2014/08/20 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
图片格式的JavaScript和CSS速查手册
2007/08/20 Javascript
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
通过jQuery源码学习javascript(二)
2012/12/27 Javascript
JavaScript设计模式之单件模式介绍
2014/12/28 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
通俗解释JavaScript正则表达式快速记忆
2017/08/23 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Python随机生成数模块random使用实例
2015/04/13 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
opencv实现简单人脸识别
2021/02/19 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
学雷锋先进个人事迹
2014/05/26 职场文书
工作检讨书怎么写
2014/10/10 职场文书
个人房屋租赁合同(标准范本)
2019/09/16 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
Python制作一个随机抽奖小工具的实现
2021/07/07 Python