怎么用脚本转换基数为中文

wen 实用脚本 2

本文目录导读:

怎么用脚本转换基数为中文

  1. 方法一:JavaScript 实现
  2. 方法二:Python 实现
  3. 方法三:命令行 Shell 脚本 (Bash)
  4. 方法四:在线工具/Excel公式
  5. 选择建议

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:适合表格数据处理

您可以根据自己的需求选择合适的方法,如果需要处理更大的数字或更复杂的格式(如金额大写),可以告诉我,我可以提供相应的优化版本。

抱歉,评论功能暂时关闭!