| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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;
- }
|