使用PHP实现日语汉字数字转换为西方阿拉伯数字的方法咨询
日语汉字数字转阿拉伯数字实现方案
核心转换逻辑
日语汉字数字的转换核心是分段累加+单位进位,适配你给出的所有示例场景,规则如下:
- 先定义基础映射字典,覆盖常用基数和单位:
基数:{"零":0, "一":1, "二":2, "三":3, "四":4, "五":5, "六":6, "七":7, "八":8, "九":9}
单位:{"十":10, "百":100, "千":1000, "万":10000, "億":100000000, "兆":1000000000000} - 维护两个变量:
total存最终总结果,current存当前分段的累计值 - 遍历每个字符:
- 如果是基数,直接赋值给临时变量
num - 如果是单位:
- 单位小于10000(十/百/千):如果当前
num为0(代表单位前没有基数,比如“十万”里的“十”前面没有数字),默认补1,current += num * 单位,清空num - 单位大于等于10000(万/億/兆):如果
current为0默认补1,total += (current + num) * 单位,清空current和num
- 单位小于10000(十/百/千):如果当前
- 如果是基数,直接赋值给临时变量
- 遍历结束后把剩余的
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
相关产品推荐
相关产品推荐

