数字转中文
实现阿拉伯数字转中文数字的方法
问题
将阿拉伯数字转换为中文数字表示,例如 123 转换为”一百二十三”。
解答
function NoToChinese(num) {
// 验证输入是否为数字
if (!/^\d*(\.\d*)?$/.test(num)) {
alert("Number is wrong!");
return "Number is wrong!";
}
var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
var BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
// 去除前导零并按小数点分割
var a = ("" + num).replace(/(^0*)/g, "").split(".");
var k = 0;
var re = "";
// 处理整数部分
for (var i = a[0].length - 1; i >= 0; i--) {
switch (k) {
case 0:
re = BB[7] + re;
break;
case 4:
if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
re = BB[4] + re;
break;
case 8:
re = BB[5] + re;
BB[7] = BB[5];
k = 0;
break;
}
if (k % 4 == 2 && num.charAt(i + 2) != 0 && num.charAt(i + 1) == 0)
re = AA[0] + re;
if (num.charAt(i) != 0)
re = AA[num.charAt(i)] + BB[k % 4] + re;
k++;
}
// 处理小数部分
if (a.length > 1) {
re += BB[6];
for (var i = 0; i < a[1].length; i++)
re += AA[a[1].charAt(i)];
}
return re;
}
关键点
- 使用正则表达式验证输入是否为合法数字格式
- 通过数组映射实现数字到中文的转换,AA 存储基本数字,BB 存储单位
- 从个位开始逆序遍历,根据位数(个十百千万亿)添加对应单位
- 处理连续零的情况,避免出现”一千零零一”这样的错误
- 小数部分直接逐位转换,用”点”连接
目录