如题!此前我曾发布过一个自己编写的脚本。
http://bbs.bathome.net/thread-70421-1-1.html
那个脚本,当时是我临时编写的(有很多不足和BUG就是了),,,
那类的脚本编写前,我曾偷懒搜索过借鉴过不少,(多数是 FOR /I )而且解构的位数,顶多也就十多万单位还是百万单位来的?忘记了, 就是不足&不满就是了,
但像我这样编写的思路是很少的,至少我玩 脚本十多年,没有人用我这样的思路去解构这样的套路。
所以理论上来说,我觉得这类思路值得新手们去学习和借鉴。
在百度上。如果你搜素 “人民币大写转换 (脚本 & bat & 程序 ) ” 多数会得出很多,不如人意或不理想的脚本和程序,,,
所以,那次我编写了自己的,,初代版本,可以解构51位数值的转换吧,,,
然后在后续使用中,同事和我反馈,一些BUG ,例如:单位结尾出错和连续0的变换,,
尔后,我根据自己当初编写时的思路做了一些完善。,
再到后来,朋友又和我说:希望添加上 角 分 的单位和把结果保存到剪切板。。。
脚本在过年前就写好了!,,
我那思维就这样,很少表达和发布,,,
我相信,论坛里有很多能人,一眼就能看出我那脚本的解构方式和思路。
无非就是把数组拆分个数,然后解析判断,,,,
我也知道我那脚本还有很多不足和bug,,,,
但是,有时候我就是懒,懒得修改和完善,因为那些对我的生活,没多大帮助和改善,,,,
这也是我没什么动力去研究第三方工具的原因,不是Windows自带的和支持的,基本懒得去深究,,,
初代版本,只有简单的结构,,
二代版本,修缮了多个0的结尾bug,,
三代版本,加上了 角 分 单位的解构,也添加了把结果变成“变量”方便调用和转换(理论上还可以加上 毫 厘 (但是我懒)),,,
(脚本是我从“我的脚本工具箱”里扣出来的,有一些无用的标签和调用,我尽量删除吧!删不完也别怪我,)
我还是很喜欢Windows自带脚本编写的,除了 BAT,也就,VBS,js,reg,hta,htm,,,,之类的(说白了就是Windows自带支持的语言,不借助第三方命令开发和编写的脚本),,
OK !废话完,上代码,,,,,(以后基本不完善和修改了,哪怕是修改,也懒得发布了),,,,,,,,,,,,- Set/p 就是调用=请输入人民币的阿拉伯数字(只支持小数点后两位):
- Call,:RMB %就是调用%
- :RMB
- Set R=%~1
- REM 百度得出中文单位分别是:清净(10的负二十一次方)、虚空、六德、刹那、弹指、瞬息、须臾、逡巡、模糊、漠、渺、埃、尘、沙、纤、微、忽、丝、毫、厘、分、零、壹、贰、叁、肆、伍、陆、柒、捌、玖、分、角、圆、拾、佰、仟、萬、亿、兆、京、垓、秭、穰、沟、涧、正、载、极(10的四十八次方)
- Echo %R%|Find "." >Nul && Goto,RMB角分
- :RMBB
- Echo %~1|FindStr "^[0-9]*$">Nul || Echo 非法输入!按任意键退出!&&Pause>Nul&&Exit
- Set RMB检测=
- Set RMB检测=%~1
- Set RMB窗口=
- Set RMB窗口=%~1
- Set 大写=
- REM 下个单位变量决定你怎么表达货币单位。以及是否加空格、、、
- Set "单位=圆 "
- :RMB位数
- Set RMB窗口=%RMB窗口:~1%
- Set/a RMB位数+=1
- If Not "%RMB窗口%"=="" Goto,RMB位数
- Echo.输入:%R%
- :RMB循环
- Set/a RMB位数-=1
- Call,:RMB转换 %RMB检测:~0,1% %RMB位数%
- Set RMB检测=%RMB检测:~1%
- If Not "%RMB检测%"=="" Goto,RMB循环
- If "%角%"=="1" Set/p="壹角"<Nul&Set 大写=%大写%壹角
- If "%角%"=="2" Set/p="贰角"<Nul&Set 大写=%大写%贰角
- If "%角%"=="3" Set/p="叁角"<Nul&Set 大写=%大写%叁角
- If "%角%"=="4" Set/p="肆角"<Nul&Set 大写=%大写%肆角
- If "%角%"=="5" Set/p="伍角"<Nul&Set 大写=%大写%伍角
- If "%角%"=="6" Set/p="陆角"<Nul&Set 大写=%大写%陆角
- If "%角%"=="7" Set/p="柒角"<Nul&Set 大写=%大写%柒角
- If "%角%"=="8" Set/p="捌角"<Nul&Set 大写=%大写%捌角
- If "%角%"=="9" Set/p="玖角"<Nul&Set 大写=%大写%玖角
- If "%分%"=="1" Set/p="壹分"<Nul&Set 大写=%大写%壹分
- If "%分%"=="2" Set/p="贰分"<Nul&Set 大写=%大写%贰分
- If "%分%"=="3" Set/p="叁分"<Nul&Set 大写=%大写%叁分
- If "%分%"=="4" Set/p="肆分"<Nul&Set 大写=%大写%肆分
- If "%分%"=="5" Set/p="伍分"<Nul&Set 大写=%大写%伍分
- If "%分%"=="6" Set/p="陆分"<Nul&Set 大写=%大写%陆分
- If "%分%"=="7" Set/p="柒分"<Nul&Set 大写=%大写%柒分
- If "%分%"=="8" Set/p="捌分"<Nul&Set 大写=%大写%捌分
- If "%分%"=="9" Set/p="玖分"<Nul&Set 大写=%大写%玖分
- Echo.&Echo.-----------------------&Set /p RMB复制= 按C复制RMB大写。
- If /i "%RMB复制%"=="c" Set/p="%大写%"<Nul|Clip
- REM 这里是脚本结尾 ,%大写% 是转换后的变量,上诉命令和写法都有很多编排和写发上的不足,希望大神们完善(反正我是懒得继续完善了)。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
- Pause>Nul & Exit
- :RMB转换
- If "%~1"=="0" Goto,RMB零
- If "%~1"=="1" Set/p="壹"<Nul&Set 大写=%大写%壹
- If "%~1"=="2" Set/p="贰"<Nul&Set 大写=%大写%贰
- If "%~1"=="3" Set/p="叁"<Nul&Set 大写=%大写%叁
- If "%~1"=="4" Set/p="肆"<Nul&Set 大写=%大写%肆
- If "%~1"=="5" Set/p="伍"<Nul&Set 大写=%大写%伍
- If "%~1"=="6" Set/p="陆"<Nul&Set 大写=%大写%陆
- If "%~1"=="7" Set/p="柒"<Nul&Set 大写=%大写%柒
- If "%~1"=="8" Set/p="捌"<Nul&Set 大写=%大写%捌
- If "%~1"=="9" Set/p="玖"<Nul&Set 大写=%大写%玖
- If "%~2"=="51" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="50" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="49" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="48" Set/p="极"<Nul&Set 大写=%大写%极&Set 位=1&Goto,:Eof
- If "%~2"=="47" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="46" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="45" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="44" Set/p="载"<Nul&Set 大写=%大写%载&Set 位=1&Goto,:Eof
- If "%~2"=="43" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="42" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="41" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="40" Set/p="正"<Nul&Set 大写=%大写%正&Set 位=1&Goto,:Eof
- If "%~2"=="39" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="38" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="37" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="36" Set/p="涧"<Nul&Set 大写=%大写%涧&Set 位=1&Goto,:Eof
- If "%~2"=="35" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="34" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="33" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="32" Set/p="沟"<Nul&Set 大写=%大写%沟&Set 位=1&Goto,:Eof
- If "%~2"=="31" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="30" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="29" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="28" Set/p="穰"<Nul&Set 大写=%大写%穰&Set 位=1&Goto,:Eof
- If "%~2"=="27" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="26" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="25" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="24" Set/p="秭"<Nul&Set 大写=%大写%秭&Set 位=1&Goto,:Eof
- If "%~2"=="23" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="22" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="21" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="20" Set/p="垓"<Nul&Set 大写=%大写%垓&Set 位=1&Goto,:Eof
- If "%~2"=="19" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="18" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="17" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="16" Set/p="京"<Nul&Set 大写=%大写%京&Set 位=1&Goto,:Eof
- If "%~2"=="15" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="14" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="13" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="12" Set/p="兆"<Nul&Set 大写=%大写%兆&Set 位=1&Goto,:Eof
- If "%~2"=="11" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="10" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="9" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="8" Set/p="亿"<Nul&Set 大写=%大写%亿&Set 位=1&Goto,:Eof
- If "%~2"=="7" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="6" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="5" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="4" Set/p="萬"<Nul&Set 大写=%大写%萬&Set 位=1&Set 零=0&Goto,:Eof
- If "%~2"=="3" Set/p="仟"<Nul&Set 大写=%大写%仟
- If "%~2"=="2" Set/p="佰"<Nul&Set 大写=%大写%佰
- If "%~2"=="1" Set/p="拾"<Nul&Set 大写=%大写%拾
- If "%~2"=="0" Set/p="%单位%"<Nul&Set "大写=%大写%%单位%"
- Set "零=0"&Set "位=0"
- Goto,:Eof
- :RMB零
- Set 后零=%RMB检测:~1,1%
- If "%后零%"=="" Set "零=1"
- If "%~2"=="0" Set/p="%单位%"<Nul&Set "大写=%大写%%单位%"
- If "%~2"=="4" If "%位%"=="0" Set/p="萬"<Nul&Set 大写=%大写%萬&Set 位=1&Set 零=0&Goto,:Eof
- If "%~2"=="8" If "%位%"=="0" Set/p="亿"<Nul&Set 大写=%大写%亿&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="12" If "%位%"=="0" Set/p="兆"<Nul&Set 大写=%大写%兆&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="16" If "%位%"=="0" Set/p="京"<Nul&Set 大写=%大写%京&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="20" If "%位%"=="0" Set/p="垓"<Nul&Set 大写=%大写%垓&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="24" If "%位%"=="0" Set/p="秭"<Nul&Set 大写=%大写%秭&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="28" If "%位%"=="0" Set/p="穰"<Nul&Set 大写=%大写%穰&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="32" If "%位%"=="0" Set/p="沟"<Nul&Set 大写=%大写%沟&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="36" If "%位%"=="0" Set/p="涧"<Nul&Set 大写=%大写%涧&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="40" If "%位%"=="0" Set/p="正"<Nul&Set 大写=%大写%正&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="44" If "%位%"=="0" Set/p="载"<Nul&Set 大写=%大写%载&Set 位=1&Set 零=1&Goto,:Eof
- If "%~2"=="48" If "%位%"=="0" Set/p="极"<Nul&Set 大写=%大写%极&Set 位=1&Set 零=1&Goto,:Eof
- If "%零%"=="0" ( If Not "%后零%"=="0" Set/p="零"<Nul&Set 大写=%大写%零&Set "零=1" )
- Goto,:Eof
- :RMB角分
- For /f "tokens=1,2 delims=." %%a in ("%R%") do (Set "Y=%%a"&Set "F=%%b" )
- Echo %F%|FindStr "^[0-9]*$">Nul || Call,:Pxit E0 27 1 2 " 非法输入!按任意键退出!"
- If Not "%F%"=="" Set "角=%F:~0,1%"&Set "分=%F:~1,1%"
- If Not "%Y%"=="" Call,:RMBB %Y%
- Goto,:Eof
复制代码 输入:450000000000000000001.25
得出:肆垓伍仟京壹圆 贰角伍分 |