本帖最后由 tryhi 于 2023-5-9 17:14 编辑
在明经群讨论了大半天的数字转函数,只有E大贴出了代码,可惜只支持到万,其他的只见装不见源码,代码写得不好,斗胆献上,仅支持到万亿,请拍砖。
- (num2str 5000000030101) =>"五万亿零三万零一百零一"
- (num2str 5012500030101) =>"五万零一百二十五亿零三万零一百零一"
汉字转数字源码在沙发,如有报错请看回复
- ;;例子(num2str 5012500030101)
- ;;将数字转换为汉字,仅支持到万亿,只支持整数
- (defun num2str(num / charofcash i n tempa tempstr)
- ;(setq num 123)
- (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 (_n2big TempStr))
- (cond
- ((= i 0)
- (if (= "零" TempStr)
- (setq TempStr "")
- )
- )
- ((= i 1)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "十"))
- )
- )
- ((= i 2)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "百"))
- )
- )
- ((= i 3)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "千"))
- )
- )
- ((= i 4)
- (if (= "零" TempStr)
- (setq TempStr "万")
- (setq TempStr (strcat TempStr "万"))
- )
- )
- ((= i 5)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "十"))
- )
- )
- ((= i 6)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "百"))
- )
- )
- ((= i 7)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "千"))
- )
- )
- ((= i 8)
- (if (= "零" TempStr)
- (setq TempStr "亿")
- (setq TempStr (strcat TempStr "亿"))
- )
- )
- ((= i 9)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "十"))
- )
- )
- ((= i 10)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "百"))
- )
- )
- ((= i 11)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "千"))
- )
- )
- ((= i 12)
- (if (/= "零" TempStr)
- (setq TempStr (strcat TempStr "万"))
- )
- )
-
- )
- (setq tempa(substr CharOfCash 1 2))
- (setq CharOfCash(if (= TempStr "零")
- (cond
- ((= tempa "零")CharOfCash)
- ((= tempa "")CharOfCash)
- ((= tempa "万")CharOfCash)
- ((= tempa "亿")CharOfCash)
- (t (strcat TempStr CharOfCash))
- )
- (strcat TempStr CharOfCash)
- ))
- )
- ;(try-substr CharOfCash 1(-(try-strlen CharOfCash)1))
- (setq temp(substr CharOfCash 1 4))
- (if (= "一十"temp)(substr CharOfCash 3)CharOfCash);去掉一十
- )
|