微软的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)
{