直接贴代码
function numberToChinese(num) {
const digitMap = ['零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'];
const unitMap = ['', '拾', '佰', '仟'];
const bigUnitMap = ['', '萬', '億', '兆'];
if (num === 0) return '零元整';
let integerPart = Math.floor(num);
let decimalPart = Math.round((num - integerPart) * 100);
let chineseStr = '';
let unitPos = 0;
let needZero = false;
while (integerPart > 0) {
let segment = integerPart % 10000;
let segmentStr = '';
for (let i = 0; segment > 0; i++) {
const digit = segment % 10;
if (digit !== 0) {
segmentStr = digitMap[digit] + unitMap[i] + segmentStr;
needZero = true;
} else if (segmentStr.length > 0 && segmentStr[0] !== digitMap[0] && needZero) {
segmentStr = digitMap[0] + segmentStr;
needZero = false;
}
segment = Math.floor(segment / 10);
}
if (segmentStr.length > 0) {
chineseStr = segmentStr + bigUnitMap[unitPos] + chineseStr;
} else if (chineseStr.length > 0 && chineseStr[0] !== digitMap[0]) {
chineseStr = digitMap[0] + chineseStr;
}
integerPart = Math.floor(integerPart / 10000);
unitPos++;
}
chineseStr += '元';
if (decimalPart > 0) {
const jiao = Math.floor(decimalPart / 10);
const fen = decimalPart % 10;
if (jiao > 0) {
chineseStr += digitMap[jiao] + '角';
}
if (fen > 0) {
chineseStr += digitMap[fen] + '分';
}
} else {
chineseStr += '整';
}
return chineseStr;
}