You need to enable JavaScript to run this app. 使用PHP实现日语汉字数字转换为西方阿拉伯数字的方法咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP实现日语汉字数字转换为西方阿拉伯数字的方法咨询

日语汉字数字转阿拉伯数字实现方案

核心转换逻辑

日语汉字数字的转换核心是分段累加+单位进位,适配你给出的所有示例场景,规则如下:

  • 先定义基础映射字典,覆盖常用基数和单位:
    基数:{"零":0, "一":1, "二":2, "三":3, "四":4, "五":5, "六":6, "七":7, "八":8, "九":9}
    单位:{"十":10, "百":100, "千":1000, "万":10000, "億":100000000, "兆":1000000000000}
  • 维护两个变量:total存最终总结果,current存当前分段的累计值
  • 遍历每个字符:
    1. 如果是基数,直接赋值给临时变量num
    2. 如果是单位:
      • 单位小于10000(十/百/千):如果当前num为0(代表单位前没有基数,比如“十万”里的“十”前面没有数字),默认补1,current += num * 单位,清空num
      • 单位大于等于10000(万/億/兆):如果current为0默认补1,total += (current + num) * 单位,清空current和num
  • 遍历结束后把剩余的current + num加到total里,就是最终结果

可直接运行的Python代码

def japanese_kansuji_to_number(kansuji: str) -> int:
    base_map = {"零": 0, "一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9}
    unit_map = {"十": 10, "百": 100, "千": 1000, "万": 10000, "億": 100000000, "兆": 1000000000000}
    
    total = 0
    current = 0
    num = 0
    
    for c in kansuji:
        if c in base_map:
            num = base_map[c]
        elif c in unit_map:
            unit = unit_map[c]
            if unit < 10000:
                current += (num if num != 0 else 1) * unit
                num = 0
            else:
                total += (current + (num if num !=0 else 1)) * unit
                current = 0
                num = 0
    total += current + num
    return total

# 测试你的示例
print(japanese_kansuji_to_number("十万")) # 输出100000
print(japanese_kansuji_to_number("三")) # 输出3
print(japanese_kansuji_to_number("八十四")) # 输出84
print(japanese_kansuji_to_number("四十万四")) # 输出400004

适配拓展说明

如果需要处理带“零”、“廿”(二十的异体)、“卅”(三十的异体)或者正式文书里的大写数字(壹、贰这类),只需要在基础映射字典里补充对应关系即可,核心逻辑不需要修改。

内容的提问来源于stack exchange,提问作者Hygison Brandao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 06:24:00