kkq0305 发表于 2023-3-24 13:40:10

中文数字转阿拉伯数字

本帖最后由 kkq0305 于 2023-3-24 13:43 编辑

; 功能:中文数字转阿拉伯数字

; 示例:(wz2num "一亿三千零六十万") >>>1.306e+008


(defun wz2num (str / numlst alst1 alst2 num lnum1 lnum2 fstr a)
(setq        numlst '(("零" . 0)
               ("一" . 1)
               ("二" . 2)
               ("三" . 3)
               ("四" . 4)
               ("五" . 5)
               ("六" . 6)
               ("七" . 7)
               ("八" . 8)
               ("九" . 9)
                )
        alst1'(("十" . 10)
               ("百" . 100)
               ("千" . 1000.0)
                )
        alst2'(("万" . 10000.0)
               ("亿" . 100000000.0)
                )
        num    0
        lnum10
        lnum20
)
(while (read str)
    (setq fstr (substr str 1 2)
          str(substr str 3)
    )
    (cond ((setq a (assoc fstr alst2))
           (setq num   (+ num (* (+ lnum1 lnum2) (cdr a)))
               lnum1 0
               lnum2 0
           )
          )
          ((setq a (assoc fstr alst1))
           (if (and (zerop lnum2) (zerop num))
             (setq num (cdr a))
             (setq lnum1 (+ lnum1 (* lnum2 (cdr a)))
                   lnum2 0
             )
           )
          )
          ((setq a (assoc fstr numlst)) (setq lnum2 (cdr a)))
          (t nil)
    )
)
(+ num lnum1 lnum2)
)

lxl217114 发表于 2023-3-24 13:56:43

顶,谢谢大佬分享。

总算有点正经的帖子了
看了好多天来明经水帖子的了

500w008 发表于 2023-3-24 13:46:40

boboxiake 发表于 2023-3-24 13:47:36

666666666666

Bao_lai 发表于 2023-3-24 14:07:10

可以的,感谢

xj6019 发表于 2023-3-24 14:09:43

本帖最后由 xj6019 于 2023-3-24 14:20 编辑

好东西就要支持,伟大无私

功能关联帖:
http://bbs.mjtd.com/forum.php?mo ... =%CA%FD%D7%D6%D7%AA   需要注意8楼的修改意见

guosheyang 发表于 2023-3-25 08:58:58

感谢递归哥的分享!

菜鸟初来乍到 发表于 2023-3-26 18:43:04

先留个脚印,明天过来投币支持

Klein 发表于 2023-3-28 15:11:22

仔细看了下提取值,妙啊,大佬们的代码就是简洁,自己写的话估计要写好几十行上百行!学习了

kkq0305 发表于 2023-3-30 12:48:57

Klein 发表于 2023-3-28 15:11
仔细看了下提取值,妙啊,大佬们的代码就是简洁,自己写的话估计要写好几十行上百行!学习了

互相借鉴,一个人的想点子,终究是抵不过无数个人的点子。发挥个人的智慧。相互学习成长。
页: [1]
查看完整版本: 中文数字转阿拉伯数字