中文数字转阿拉伯数字
本帖最后由 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)
)
顶,谢谢大佬分享。
总算有点正经的帖子了
看了好多天来明经水帖子的了 666666666666 可以的,感谢
本帖最后由 xj6019 于 2023-3-24 14:20 编辑
好东西就要支持,伟大无私
功能关联帖:
http://bbs.mjtd.com/forum.php?mo ... =%CA%FD%D7%D6%D7%AA 需要注意8楼的修改意见
感谢递归哥的分享! 先留个脚印,明天过来投币支持 仔细看了下提取值,妙啊,大佬们的代码就是简洁,自己写的话估计要写好几十行上百行!学习了 Klein 发表于 2023-3-28 15:11
仔细看了下提取值,妙啊,大佬们的代码就是简洁,自己写的话估计要写好几十行上百行!学习了
互相借鉴,一个人的想点子,终究是抵不过无数个人的点子。发挥个人的智慧。相互学习成长。
页:
[1]