转载自:https://www.zuojl.com/convert-menoy-chinese-use-js/
叙述
在工作中经常会遇到需要将金额转换成繁体数组进行展示的情况,这个转换的过程可以后台进行也可以在前端进行。 本文使用 JavaScript 将金额数字转换成中文繁体,废话不多说直接上代码:
解决方案
/**
* 将给定的金额数值转换为中文繁体的方法,
* 最大值为'兆'的的数值,不为负数
* @author zuojl
* @version 2016.05.04 v1.0
* @param money 传入的金额数值
* @return result 当返回的不是'ERROR'时,
* 返回的是转换后的金额中文值
*/
var _moneyToChinese = function(money){
//判断是否为数字,不是返回'ERROR'
var pattern = /^\d+(.\d{1,2})?$/;
//匹配0,小数,负数:/^(0|-?[1-9][0-9]*)(.[0-9]{1,2})?$/
//匹配100,100的格式:/^(0|((-?[1-9][0-9]{1,2})(,[0-9]{3})*|(0|-?[1-9][0-9]*))(.[0-9]{1,2})?)$/
if(money == '' || !pattern.test(money)){
return 'ERROR!';
}
money += '';
var s1 = new Array('零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');//存储数值部分
var s2 = new Array('分', '角', '圆', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟', '万', '亿', '兆');//存储单位部分
//将money字符串转化为分
var str;//用来存储转化为分的字符串
var result = '';//用来存储
var index = money.lastIndexOf(".");
if(index != -1){
var temp = money.substring(index + 1);
var len = temp.length;
if(len > 2){
len = 2;
temp = temp.substring(0, 2);
}
for(var i = 0; i < 2 - len; i++){
temp += '0';
}
str = money.substring(0, index) + temp;
} else {
str = money + '00';
}
/*
* 将分的每一位数字取出
* 将其与数值和单位部分进行匹配
* 组合成转换后的金额
*/
for (i = 0; i < str.length; i++) {
var n = str.charAt(str.length - 1 - i);
result = s1[n] + "" + s2[i] + result;
}
/*
* 通过正则优化
*/
//优化有零的
result = result.replace(/零分/g, "零");
result = result.replace(/零角/g, "零");
result = result.replace(/零圆/g, "零");
result = result.replace(/零拾/g, "零");
result = result.replace(/零佰/g, "零");
result = result.replace(/零仟/g, "零");
result = result.replace(/零万/g, "零");
result = result.replace(/零亿/g, "零");
//优化多个相连的零
result = result.replace(/零零/g, "零");
//优化以零结尾的
result = result.replace(/零$/, "");
//优化整元
result = result.replace(/圆$/, "圆整");
result = result.replace(/零圆$/, "零圆整");
return result;
};
实现的代码也是非常的简单,将数字数组中的每个字符替换成汉族后,使用正则替换的方式进行优化。