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


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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
Oct 06 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
使用PHP实现蜘蛛访问日志统计
Jul 05 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
PHP的preg_match匹配字符串长度问题解决方法
May 03 PHP
php生成随机密码自定义函数代码(简单快速)
May 10 PHP
php+mysqli批量查询多张表数据的方法
Jan 29 PHP
Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
Mar 07 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 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
自己动手,丰衣足食 - 短波框形天线制作
2021/03/01 无线电
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
php 启动报错如何解决
2014/01/17 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
PHP基于面向对象实现的留言本功能实例
2018/04/04 PHP
jQuery UI-Draggable 参数集合
2010/01/10 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
详解vue中axios的封装
2018/07/18 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[02:51]2018年度DOTA2最佳中单位选手-完美盛典
2018/12/17 DOTA
python3音乐播放器简单实现代码
2020/04/20 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
Python数据拟合与广义线性回归算法学习
2017/12/22 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
Python实现App自动签到领取积分功能
2018/09/29 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
联想德国官网:Lenovo Germany
2018/07/04 全球购物
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
会计核算科岗位职责
2014/03/19 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
乡镇党员群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
如何用threejs实现实时多边形折射
2021/05/07 Javascript
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫