将数字转换为中文大写金额的 JavaScript 函数
在日常的软件开发中,经常会遇到将数字转换为中文大写金额的需求,特别是在金融、财务等领域的应用中。为了满足这一需求,我们可以编写一个 JavaScript 函数来实现这个功能。下面是一个简单而实用的函数,可以将给定的数字转换为中文大写金额:
工具方法
/**
* 将数字转换为中文大写金额
* @param {number|string} money - 要转换的金额,可以是数字或字符串
* @returns {string} 返回中文大写金额字符串
*/
export function numberParseChina(money) {
// 定义中文数字
const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
// 定义中文整数部分的基本单位
const cnIntRadice = ['', '拾', '佰', '仟'];
// 定义中文整数部分的扩展单位
const cnIntUnits = ['', '万', '亿', '兆'];
// 定义中文小数部分的单位
const cnDecUnits = ['角', '分', '毫', '厘'];
// 定义整数金额时后面跟的字符
const cnInteger = '整';
// 定义整型完以后的单位
const cnIntLast = '圆';
// 最大处理的数字
const maxNum = 999999999999999.9999;
// 空字符串返回空
if (money === '') {
return '';
}
// 将金额转换为数字类型
money = parseFloat(money);
// 超过最大处理范围则返回空
if (money >= maxNum) {
return '';
}
// 金额为0时直接返回
if (money === 0) {
return cnNums[0] + cnIntLast + cnInteger;
}
// 将金额转换为字符串
money = money.toString();
// 分离整数部分和小数部分
let [integerNum, decimalNum] = money.includes('.') ? money.split('.') : [money, ''];
// 输出的中文金额字符串
let chineseStr = '';
// 处理整数部分
if (parseInt(integerNum, 10) > 0) {
// 计算整数部分中零的个数
const zeroCount = integerNum.split('').reverse().reduce((count, n, i, arr) => {
const m = (arr.length - 1 - i) % 4;
const q = Math.floor((arr.length - 1 - i) / 4);
// 当前数字不为零时添加对应的中文数字和单位
if (n !== '0') {
chineseStr += cnNums[parseInt(n)] + cnIntRadice[m] + (m === 0 && count < 4 ? cnIntUnits[q] : '');
return 0;
} else {
// 当前数字为零时,统计零的个数
return count + 1;
}
}, 0);
// 当整数部分全为零时,添加“零圆”
if (zeroCount === integerNum.length) {
chineseStr += cnNums[0] + cnIntLast;
}
}
// 处理小数部分
if (decimalNum !== '') {
// 添加小数部分的中文表示
chineseStr += decimalNum.split('').map((n, i) => {
// 当小数位不为零时,添加对应的中文数字和单位
if (n !== '0') {
return cnNums[parseInt(n)] + cnDecUnits[i];
}
return '';
}).join('');
}
// 若金额为整数,则添加“整”字
return chineseStr === '' ? cnNums[0] + cnIntLast + cnInteger : chineseStr;
}
页面引用
<u-input type="digit" placeholder="请输入要充值的金额" border="none" v-model="money" ></u-input>
{{ numberParseChina(money) }} money 转换的值
import { numberParseChina } from '@/utils/tool';