convertToChinese(num) {
// 确保传入的num是字符串,并处理小数部分(如果有的话)
var numStr = num.toString();
var [integerPartStr, decimalPartStr] = numStr.split(".");
var integerPart = parseInt(integerPartStr, 10);
// 中文数字
const cnNums = [
"零",
"壹",
"贰",
"叁",
"肆",
"伍",
"陆",
"柒",
"捌",
"玖",
];
// 小数部分单位(注意:通常只用到“角”和“分”)
const cnDecUnits = ["毫", "厘", "分", "角"];
// 大单位
const bigUnits = ["", "万", "亿"];
// 小单位(位值)
const smallUnits = ["", "拾", "佰", "仟"];
let chineseInteger = "";
let chineseDecimal = "";
let partIndex = 0; // 用于追踪当前处理的是哪一个大单位(万、亿等)
let partLength = 4; // 每个大单位包含的小单位数量(例如,1万位有4个小单位:个、十、百、千)
// 处理整数部分
while (integerPart > 0) {
let p = "";
let tempNum = integerPart % Math.pow(10, partLength); // 取出当前大单位下的数值
integerPart = Math.floor(integerPart / Math.pow(10, partLength)); // 更新剩余未处理的数值
for (let i = 0; i < partLength && tempNum > 0; i++) {
const digit = tempNum % 10;
p = cnNums[digit] + smallUnits[i] + p;
tempNum = Math.floor(tempNum / 10);
}
// 去除末尾无用的零和开头的零
p = p.replace(/(零.)*零$/, "").replace(/^$/, "零");
if (p !== "") {
chineseInteger = p + bigUnits[partIndex] + chineseInteger;
}
// 第一个大单位特殊处理:加“元”
if (partIndex === 0 && chineseInteger !== "") {
chineseInteger = p + "元";
}
partIndex++;
}
// 处理小数部分
if (decimalPartStr) {
decimalPartStr
.split("")
.reverse()
.forEach((digit, index) => {
if (digit !== "0") {
let unitIndex = Math.min(index, cnDecUnits.length - 1); // 确保不会超出单位数组界限
chineseDecimal =
cnNums[parseInt(digit)] +
cnDecUnits[unitIndex] +
chineseDecimal;
}
// 如果小数部分全是0,则不添加任何小数单位(但这里由于反转了,所以会自动处理)
});
// 如果小数部分全是0,则不添加小数部分
if (chineseDecimal === "") {
chineseDecimal = "整";
}
} else {
chineseDecimal = "整"; // 没有小数部分时,默认添加“整”
}
// 返回结果
return chineseInteger + chineseDecimal;
},
价格由小写转成大写,把小数转成[“角“, “分“, “厘“, “毫“]
于 2024-08-08 13:00:05 首次发布