数字金额转为大写
代码如下:
/**
* 金额转大写
* @param account - 金额
*/
export function upperMoney(account: number): string {
const money = formatFloat(account, 2); // 金额保留两位小数
// 汉字的数字
const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
// 基本单位
const cnIntRadice = ['', '拾', '佰', '仟'];
// 对应整数部分扩展单位
const cnIntUnits = ['', '万', '亿', '兆'];
// 对应小数部分单位
const cnDecUnits = ['角', '分', '毫', '厘'];
// 整数金额时后面跟的字符
const cnInteger = '整';
// 整型完以后的单位
const cnIntLast = '元';
// 最大处理的数字
const maxNum = 9999999999999.99;
// 金额整数部分
let integerNum = '';
// 金额小数部分
let decimalNum = '';
// 输出的中文金额字符串
let chineseStr = '';
// 分离金额后用的数组,预定义
let parts: Array<string>;
if (money >= maxNum) {
// 超出最大处理数字
return '';
}
if (money === 0) {
chineseStr = cnNums[0] + cnIntLast + cnInteger;
return chineseStr;
}
// 转换为字符串
let moneyStr = money.toString();
if (money < 0) {
// 负数判断
moneyStr = moneyStr.slice(1);
}
if (moneyStr.indexOf('.') === -1) {
integerNum = moneyStr;
decimalNum = '';
} else {
parts = moneyStr.split('.');
integerNum = parts[0] as string;
decimalNum = parts[1] as string;
}
// 获取整型部分转换
if (parseInt(integerNum, 10) > 0) {
let zeroCount = 0;
const IntLen = integerNum.length;
for (let i = 0; i < IntLen; i += 1) {
const n = integerNum.substring(i, i + 1);
const p = IntLen - i - 1;
const q = p / 4;
const m = p % 4;
if (n === '0') {
zeroCount += 1;
} else {
if (zeroCount > 0) {
chineseStr += cnNums[0];
}
// 归零
zeroCount = 0;
chineseStr += cnNums[parseInt(n, 10)] + cnIntRadice[m];
}
if (m === 0 && zeroCount < 4) {
chineseStr += cnIntUnits[q];
}
}
chineseStr += cnIntLast;
}
// 小数部分
if (decimalNum !== '') {
const decLen = decimalNum.length;
for (let i = 0; i < decLen; i += 1) {
const n = decimalNum.substring(i, i + 1);
if (n !== '0') {
chineseStr += cnNums[Number(n)] + cnDecUnits[i];
}
}
}
if (chineseStr === '') {
chineseStr += cnNums[0] + cnIntLast + cnInteger;
} else if (decimalNum === '') {
chineseStr += cnInteger;
}
return (money < 0 ? '负' : '') + chineseStr;
}
使用实例
upperMoney(976431825) // 玖亿柒仟陆佰肆拾叁万壹仟捌佰贰拾伍元整
本文介绍了一个JavaScript函数,用于将数字金额转换为中文大写表示,包括整数部分和小数部分的处理,以及负数的特殊处理。
778

被折叠的 条评论
为什么被折叠?



