tryhi 发表于 2015-10-18 21:43:36

[源码]数字转为汉字函数、汉字数字互转

本帖最后由 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)
;===>"五万零一百二十五亿零三万零一百零一"

llsheng_73 发表于 2017-7-26 13:17:31

终于可以两次进到明经

15019720309 发表于 2024-4-20 23:22:48

tryhi 发表于 2024-4-19 10:07
命令: (num2str 10)
"十"



您好,我在两台电脑试了。一台一切正常,另一台在11-19区间会返还“一十一” “一十二”,在10会返还空字符串。代码完全一样

tryhi 发表于 2024-4-19 10:07:59

15019720309 发表于 2024-4-14 23:30
请问为什么输入10返回nil

命令: (num2str 10)
"十"

不知道你是怎么输的

tryhi 发表于 2015-10-18 21:46:54

本帖最后由 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")
)
)

sunhaijiu 发表于 2015-10-18 21:46:58

哈哈 哈哈哈哈

冰之绝恋 发表于 2015-10-18 21:58:59

赞哦~\(≧▽≦)/~

迷不知途 发表于 2015-10-19 00:16:37

多谢,源码!!学习学习!!!

crtrccrt 发表于 2015-10-19 07:48:46

_N2BIG
缺少子程序

ynhh 发表于 2015-10-19 09:01:44

; 错误: no function definition: _N2BIG

tryhi 发表于 2015-10-19 22:54:06

本帖最后由 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" . "九"))))
)

ynhh 发表于 2015-10-20 11:26:12

1.(num2str 5012500030101)
; 错误: 参数类型错误: stringp nil

tryhi 发表于 2015-10-20 12:46:07

ynhh 发表于 2015-10-20 11:26 static/image/common/back.gif
1.(num2str 5012500030101)
; 错误: 参数类型错误: stringp nil

_N2BIG函数拷贝有误,已经修改_N2BIG函数
页: [1] 2 3
查看完整版本: [源码]数字转为汉字函数、汉字数字互转