本文目录导读:

JavaScript 实现
function numberToChinese(num) {
const digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
const units = ['', '十', '百', '千'];
const bigUnits = ['', '万', '亿', '兆'];
if (num === 0) return '零';
let result = '';
let numStr = num.toString();
let chunkCount = Math.ceil(numStr.length / 4);
let chunks = [];
// 将数字按4位分块
for (let i = 0; i < chunkCount; i++) {
let start = Math.max(0, numStr.length - (i + 1) * 4);
let end = numStr.length - i * 4;
chunks.unshift(numStr.slice(start, end));
}
// 处理每个块
for (let i = 0; i < chunks.length; i++) {
let chunk = chunks[i];
let chunkNum = parseInt(chunk);
let chunkStr = '';
if (chunkNum === 0) {
continue;
}
// 处理块内的每一位
for (let j = 0; j < chunk.length; j++) {
let digit = parseInt(chunk[j]);
let pos = chunk.length - 1 - j;
if (digit === 0) {
if (j < chunk.length - 1 && parseInt(chunk[j + 1]) !== 0) {
chunkStr += '零';
}
} else {
chunkStr += digits[digit] + units[pos];
}
}
// 添加大单位
chunkStr += bigUnits[chunks.length - 1 - i];
result += chunkStr;
}
// 处理特殊情况
result = result.replace(/一十/g, '十'); // 10 -> 十
if (result.startsWith('一十')) {
result = result.slice(1); // 15 -> 十五
}
return result;
}
// 使用示例
console.log(numberToChinese(1234567)); // 一百二十三万四千五百六十七
console.log(numberToChinese(1000000)); // 一百万
console.log(numberToChinese(1001001)); // 一百万一千零一
Python 实现
def number_to_chinese(num):
"""
将数字转换为中文
"""
digits = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
units = ['', '十', '百', '千']
big_units = ['', '万', '亿', '兆']
if num == 0:
return '零'
if num < 0:
return '负' + number_to_chinese(-num)
result = ''
num_str = str(num)
# 分块处理
chunks = []
while len(num_str) > 4:
chunks.insert(0, num_str[-4:])
num_str = num_str[:-4]
chunks.insert(0, num_str)
chunk_count = len(chunks)
for i, chunk in enumerate(chunks):
chunk_num = int(chunk)
if chunk_num == 0:
continue
chunk_str = ''
chunk_len = len(chunk)
for j, digit_char in enumerate(chunk):
digit = int(digit_char)
pos = chunk_len - 1 - j
if digit == 0:
# 处理零
if (j < chunk_len - 1 and
int(chunk[j + 1]) != 0 and
not (chunk_str and chunk_str.endswith('零'))):
chunk_str += '零'
else:
chunk_str += digits[digit] + units[pos]
# 添加大单位
chunk_str += big_units[chunk_count - 1 - i]
result += chunk_str
# 处理块间零
if i < chunk_count - 1 and int(chunks[i + 1]) < 1000:
next_chunk = str(int(chunks[i + 1]))
if len(next_chunk) < len(str(int(chunks[i + 1]))):
if not result.endswith('零'):
result += '零'
# 处理 "一十" 到 "十" 的情况
result = result.replace('一十', '十')
if result.startswith('十'):
pass # 10 -> 十
return result
# 使用示例
print(number_to_chinese(1234567)) # 一百二十三万四千五百六十七
print(number_to_chinese(1000000)) # 一百万
print(number_to_chinese(1001001)) # 一百万一千零一
命令行 Shell 脚本 (Bash)
#!/bin/bash
# 中文数字转换函数
num_to_chinese() {
local num=$1
local digits=("零" "一" "二" "三" "四" "五" "六" "七" "八" "九")
local units=("" "十" "百" "千")
local big_units=("" "万" "亿" "兆")
if [ $num -eq 0 ]; then
echo "零"
return
fi
if [ $num -lt 0 ]; then
echo -n "负"
num=$((num * -1))
fi
local result=""
local num_str=$num
local chunk_count=0
local chunks=()
# 分块
while [ $num_str -gt 0 ]; do
chunks+=($((num_str % 10000)))
num_str=$((num_str / 10000))
chunk_count=$((chunk_count + 1))
done
# 处理每个块
for ((i = ${#chunks[@]} - 1; i >= 0; i--)); do
local chunk=${chunks[$i]}
if [ $chunk -eq 0 ]; then
continue
fi
local chunk_str=""
local chunk_num=$chunk
# 处理块内数字
for ((j = 3; j >= 0; j--)); do
local power=$((10 ** j))
local digit=$((chunk_num / power))
if [ $digit -ne 0 ]; then
if [ $j -eq 1 ] && [ $digit -eq 1 ] && [ -z "$chunk_str" ]; then
chunk_str+="十"
else
chunk_str+="${digits[$digit]}${units[$j]}"
fi
chunk_num=$((chunk_num % power))
elif [ -n "$chunk_str" ] && [[ $chunk_str != *"零"* ]]; then
if [ $chunk_num -ne 0 ]; then
chunk_str+="零"
fi
fi
done
# 添加大单位
chunk_str+="${big_units[$i]}"
result+="$chunk_str"
done
echo "$result"
}
# 使用示例
echo "1234567 -> $(num_to_chinese 1234567)"
echo "1000000 -> $(num_to_chinese 1000000)"
echo "10010 -> $(num_to_chinese 10010)"
在线工具/Excel公式
如果使用 Excel,可以用这个公式:
=IF(A1=0,"零",IF(A1<0,"负","")&SUBSTITUTE(SUBSTITUTE(
TEXT(INT(ABS(A1)),"[DBNum1]"),
"一十","十"),"一百零一十","一百一十"))
选择建议
- JavaScript:适合网页应用
- Python:适合数据处理和自动化脚本
- Bash:适合Linux命令行环境
- Excel:适合表格数据处理
您可以根据自己的需求选择合适的方法,如果需要处理更大的数字或更复杂的格式(如金额大写),可以告诉我,我可以提供相应的优化版本。