export function numberToChinese(num) { // 处理非数字、负数或小数情况 if (isNaN(num) || num < 0 || !Number.isInteger(num)) { return "无效非负整数"; } // 定义基本数字对应的中文 const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']; // 定义单位(对应不同位数:个、十、百、千、万、十、百、千、亿、十、百、千) const units = ['', '十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千']; // 处理0的情况 if (num === 0) { return digits[0]; } const numStr = num.toString(); const length = numStr.length; let result = ''; let zeroFlag = false; // 标记是否需要补零 for (let i = 0; i < length; i++) { const digit = parseInt(numStr[i]); const position = length - 1 - i; // 计算当前数字的位数索引 if (digit !== 0) { // 如果之前有零,先补一个零 if (zeroFlag) { result += digits[0]; zeroFlag = false; } result += digits[digit] + units[position]; } else { // 当前数字是零,标记需要补零(但不立即补) zeroFlag = true; // 处理单位在万、亿时的特殊情况(避免连续单位) if (units[position] === '万' || units[position] === '亿') { result += units[position]; zeroFlag = false; // 万/亿单位后重置零标记 } } } // 处理十位数的特殊情况(如10->十,而不是一十) if (result.startsWith('一十')) { result = result.substring(1); } return result; }