您的位置:首页网页设计PHP技巧 → 将数字格式的计算结果转为汉字格式

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

时间:2004/11/7 3:18:00来源:本站整理作者:蓝点我要评论(0)

有没有想过将数字格式的计算结果转化为汉字格式的? 有人会问"干嘛要转, 数字形式不是蛮好嘛", 可是当这个数字很长的时候就不太容易读出来了吧, 就算是有千分位的分隔符也不易顺口说出, 因为这个符号是位英语行方便的, 不是适合我们的读法. 那就自己写一个函数来完成这项任务吧.



将下列代码加到你的网页里, 通过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
            else if (j==2&&i
            else if (j==3&&i
        }

        if (j==4&&i
        if (k==4&&i
        else if (k==8&&i
    //-----------

    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+"
"+num2chi(hi));


相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 如何恢复Discuz!7.0被 CSS实现Tab技巧Linux配置DHCP服务器实例:linux配置教程如何在IIS7下设置支持PHP程序PHP技巧--通过COM使用ADODB

人气排行 dedecms数据库表和字段说明最小化数据传输——在客户端存储数据php如何自动跳转中英文页面如何在IIS7下设置支持PHP程序php批量获取首字母(汉字、数字、英文)经典php实现大文件上传源代码Windows环境PHP的session不能正常使用解决办PHP聊天室技术