需求是这样的:
公司在做一个项目,界面上有很多人明币要显示,之前不是做了一个发票开单据,使用html写的吗?有些单据上面需要把人明币转大写,然后再打印。
具体代码如下:
/**
* 金额转人民币大小写
* @param number
* @returns {string}
*/
function convertToChineseCurrency(number) {
const MAX_NUMBER = 99999999999.99; // 最大处理的数字
// 定义转换字符
const CN_NUMBERS = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
const CN_UNITS = ['', '拾', '佰', '仟'];
const CN_SECTIONS = ['', '万', '亿', '兆'];
const CN_DECIMALS = ['角', '分'];
const CN_INTEGER = '整';
const CN_YUAN = '元';
// 检查输入数字是否大于最大数字
if (number > MAX_NUMBER) {
return '超出最大处理数字';
}
// 转换整数部分
function convertInteger(integer) {
let str = '';
let zeroCount = 0;
for (let i = 0; i < integer.length; i++) {
let n = integer[i];
let p = integer.length - i - 1;
let q = p / 4;
let m = p % 4;
if (n === '0') {
zeroCount++;
} else {
if (zeroCount > 0) {
str += CN_NUMBERS[0];
}
zeroCount = 0; // 重置零计数
str += CN_NUMBERS[parseInt(n)] + CN_UNITS[m];
}
if (m === 0 && zeroCount < 4) {
str += CN_SECTIONS[q];
}
}
return str;
}
// 转换小数部分
function convertDecimal(decimal) {
let str = '';
for (let i = 0; i < decimal.length; i++) {
if (decimal[i] !== '0') {
str += CN_NUMBERS[decimal[i]] + CN_DECIMALS[i];
}
}
return str || CN_INTEGER;
}
// 分离整数和小数部分
let parts = (number + '').split('.');
let integerPart = parts[0];
let decimalPart = parts[1] || '';
// 如果没有小数部分,则补零
if (decimalPart.length < 2) {
decimalPart += '0';
}
return convertInteger(integerPart) + CN_YUAN + convertDecimal(decimalPart);
}
测试代码: console.log(convertToChineseCurrency(160301.06)); // 输出:壹拾陆万零叁佰零壹元陆分
以上就是整个代码,喜欢点个赞,支持一下吧。