转换阿拉伯数字为汉字数码[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 fpeez 的 blog

    微软的office word 2000 中有一个 "插入->数字" 的功能, 可自由选择数字类型. 注意到有一种类型为 "一二三..." (或:"壹贰叁..."), 此功能在会计应用中应该较广. 本人琢磨几日, 经过多次修改, 编写了一个 javascript 版本的 "转换阿拉伯数字为汉字数码" 函数.
    本人第一次在 csdn 上发表文章, 各位对此文章有何看法, 敬请提出, 不胜感激!
    以下是函数代码 (某些变量的叫法可能不大准确). 顺便说明, 主体函数是 changedigittohanzi(instring,isupcase,times,errorcode), 其中参数 "instring" 要求 "只能含有数码字符, 并且不能以0开头", 此项处理既可置于主体函数内, 亦可置于主体函数外, 文中采用前者, 并提供另一函数 formateddigit(instring) 实现之.
    调用举例:
    <script language="javascript">
        document.writeln
            (changedigittohanzi("13800138000",false,"个万亿兆","e"));
        document.writeln
            (changedigittohanzi("1380013800013800138",false,"个万亿兆","e"));
    </script>
    显示为:
        一百三十八亿〇一十三万八千
        e

/*----------------------------------------------------------------------------*/
/**
 * 转换阿拉伯数字为汉字数码
 * @author fpeez
 * @author fpeez@163.com
 * @version 1.0
*/


/**
 * 主体函数, 实现转换
 * @param instring    (string)输入的阿拉伯数字字符串(如: "13800138000")
 * @param isupcase    (boolean)输出汉字数码大小写指示(如: false)
 * @param times       (string)阶数(如: "个万亿兆...")
 * @param errorcode   (string)错误时(溢出,空值,...)归零显示(如: "e")
 * @return ~errorcode
 * @return ~out       (string)转换后的汉字数码(如: "一百三十八亿〇一十三万八千")
*/
function changedigittohanzi(instring, isupcase, times, errorcode)
{

    /** 输入字符串预处理, 亦可放到函数外执行 **/
    instring=formateddigit(instring);

    /** 变量定义 **/
    var base,digit;                           // times: 阶数("个万亿兆...")
    if(isupcase)
    {
        base="个拾佰仟";                      // base: 位数
        digit="零壹贰叁肆伍陆柒捌玖";         // digit: 汉字数码串(大写)
    }
    else
    {
        base="个十百千";
        digit="〇一二三四五六七八九";
    }

    var slen,b,t,blen;
    slen=instring.length;                     // 输入字符串的长度
    blen=base.length;                         // 位数的长度
    if(slen>blen*times.length || slen<1)      // 溢出归零
        return errorcode;
    b=(slen-1)%blen;                          // 当前数码在base中的位置
    t=math.floor((slen-1)/blen);              // 当前数码在times中的位置

    var i,at,zero;
    i=0;                                      // at某个位上的数码, i循环计数
    zero="";                                  // 保存数字中的0值

    var out;
    out="";                                   // 输出汉字数码

    /** 开始 **/
    at=instring.charcodeat(i)-48;             // 处理"一十二"为"十二", 此时i=0
    if(at==1 && b==1)
    {

本文关键:数字 转换 汉字 数码
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top