[源码]数字转为汉字函数、汉字数字互转
本帖最后由 tryhi 于 2024-6-26 10:36 编辑在明经群讨论了大半天的数字转函数,只有E大贴出了代码,可惜只支持到万,其他的只见装不见源码,代码写得不好,斗胆献上,仅支持到万亿,请拍砖。
[*](num2str 5000000030101) =>"五万亿零三万零一百零一"
[*](num2str 5012500030101) =>"五万零一百二十五亿零三万零一百零一"
汉字转数字源码在沙发,如有报错请看回复
;;例子(num2str 5012500030101)
;;将数字转换为汉字,仅支持到万亿,只支持整数
(defun num2str(num / charofcash i n tempa tempstr)
(setq s0 '( "零""一""二""三""四""五""六""七""八""九" ))
(setq s1 '("""十""百""千""万""十""百""千""亿""十""百""千""万"))
(setq num (rtos num 2 0));转字符串
(setq i -1 CharOfCash "")
(setq n(strlen num))
(repeat n
(setq i(1+ i))
(setq TempStr(substr num (- n i)1))
(setq TempStr (nth (atoi TempStr) s0))
(if (/= "零" TempStr)
(setq TempStr (strcat TempStr (nth i s1)))
)
(setq tempa(substr CharOfCash1 2))
(if (or (/= TempStr "零")(not(or (wcmatch tempa "零,万,亿")(= tempa ""))))
(setq CharOfCash(strcat TempStr CharOfCash))
)
)
(setq temp(substr CharOfCash 1 4))
(if (= "一十"temp)(substr CharOfCash 3)CharOfCash);去掉一十
)
(num2str 5012500030101)
;===>"五万零一百二十五亿零三万零一百零一" 终于可以两次进到明经 tryhi 发表于 2024-4-19 10:07
命令: (num2str 10)
"十"
您好,我在两台电脑试了。一台一切正常,另一台在11-19区间会返还“一十一” “一十二”,在10会返还空字符串。代码完全一样 15019720309 发表于 2024-4-14 23:30
请问为什么输入10返回nil
命令: (num2str 10)
"十"
不知道你是怎么输的 本帖最后由 tryhi 于 2016-3-23 15:08 编辑
(str2num "一千零八十万八千七百六十七")
;;汉字转数字
(defun str2num(str)
(defun _qian(w1 / i n num strx)
(setq w1 (try-StrRegExpReplace w1"零"""))
(setq w1 (strcat w1"零"))
(setq w1l(try-StrRegExp w1 ".+?[千百十零]"))
(setq i -1 n 0)
(repeat (length w1l)
(setq i(1+ i) strx(nth i w1l))
(setq num (strcat(_n2s (substr strx 1 2))(_n2s (substr strx 3 2))))
(setq n(+ n (atof num)))
)
)
(if(="十"(substr str 1 2))(setq str(strcat "一"str)))
(setq ls(try-StringSplit str "万"))
(setq w1 (last ls)n 0)
(if (/= ""w1) (setq n (_qian w1)))
(if (< 1(length ls))(setq n(+ n(* 10000(_qian(car ls))))))
(fix n)
)
(defun _n2s(num)
(cond
((= num "零")"")
((= num "一")"1")
((= num "二")"2")
((= num "两")"2")
((= num "三")"3")
((= num "四")"4")
((= num "五")"5")
((= num "六")"6")
((= num "七")"7")
((= num "八")"8")
((= num "九")"9")
((= num "十")"0")
((= num "百")"00")
((= num "千")"000")
)
) 哈哈 哈哈哈哈 赞哦~\(≧▽≦)/~ 多谢,源码!!学习学习!!! _N2BIG
缺少子程序
; 错误: no function definition: _N2BIG 本帖最后由 tryhi 于 2015-10-22 19:39 编辑
ynhh 发表于 2015-10-19 09:01 static/image/common/back.gif
; 错误: no function definition: _N2BIG(defun _N2BIG(num)
(cdr (assoc num '(("0" . "零")("1" . "一")("2" . "二")("3" . "三")("4" . "四")("5" . "五")("6" . "六")("7" . "七")("8" . "八")("9" . "九"))))
) 1.(num2str 5012500030101)
; 错误: 参数类型错误: stringp nil ynhh 发表于 2015-10-20 11:26 static/image/common/back.gif
1.(num2str 5012500030101)
; 错误: 参数类型错误: stringp nil
_N2BIG函数拷贝有误,已经修改_N2BIG函数