返回列表 发帖

[数值计算] 求批处理人民币小写转大写的算法

今天突然想到用批处理做一个人民币小写金额转大写金额的批处理,于是着手去写,谁料写到一半发现思路不对。
主要体现在一个数中连续零的问题没法解决。
于是百度了下别人写的代码,发现也不行。
比如:100000008.00
在此求高手支招!最好奉上代码,有劳!

我原本的思路是:先把金额数字转换为大写,然后补上单位,最后解决关于连续零的问题(无奈发现连续零不好解决)

回复 8# smss
   
       使用自己做的测试数据集做了对比,结果如下
@echo off&setlocal enabledelayedexpansion
:测试
for /f "tokens=1,2 delims=¥ " %%y in ('findstr "^¥" %~sf0') do (
call :转换 %%y
echo. 小写:%%y  大写:!返回! >> %0.log
if not "人民币!返回!"=="%%z" (
echo %%y 转换异常 返回:!返回! 参考:%%z
echo %%y 转换异常 返回:!返回! 参考:%%z>> %0.log
)
)
pause>nul
goto :eof
:转换
setlocal enabledelayedexpansion
set a=零壹贰叁肆伍陆柒捌玖
set b=分角元拾佰仟万拾佰仟亿拾佰仟
set "Z=999999999999.99"
:X
if not "%Y%"=="" (endlocal & set 返回=%Y%& goto :eof)
rem color 0d
rem setlocal
::对输入数字处理,取出整数和小数
set Z=%1
if /i "%Z%"=="q" exit
if "%Z%"=="0" set y=零元整&goto X
for /f "tokens=1,2 delims=." %%a in ('echo;%Z%^|findstr /b /e "[1-9][0-9]* 0 [1-9][0-9]*\.[0-9]* 0\.[0-9]*"') do (set Z2=%%b00&set Z=%%a!Z2:~0,2!&set "i=%%a"&set "j=%%b")
if defined i (if defined j (if "%j:~2%" NEQ "" (goto U) else if "%i:~12%" NEQ "" (goto U) else (goto Y)
) else if "%i:~12%" NEQ "" (goto U) else (goto Y)) else (goto U)
:Y
call set Y=%%a:~%Z:~-1,1%,1%%%%b:~%bit%,1%%%Y%
set /a bit+=1
set Z=%Z:~0,-1%
if not "%Z%"=="" goto Y
set Y=%Y:零壹=壹%
set Y=%Y:零贰=贰%
set Y=%Y:零叁=叁%
set Y=%Y:零肆=肆%
set Y=%Y:零伍=伍%
set Y=%Y:零柒=柒%
set Y=%Y:零捌=捌%
set Y=%Y:零玖=玖%
set Y=%Y:零仟=零%
set Y=%Y:零佰=零%
set Y=%Y:零拾=零%
set Y=%Y:零零零=零%
set Y=%Y:零零=零%
set Y=%Y:零万=万元%
set Y=%Y:零亿=亿元%
set Y=%Y:零零=零%
set Y=%Y:零分=零%
set Y=%Y:零角=零%
set Y=%Y:角零=角%
set Y=%Y:零零=%
set Y=%Y:零亿=亿%
set Y=%Y:零万=万%
set Y=%Y:零元=%
set Y=%Y:零万=元%
set Y=%Y:亿万=亿%
rem color 0b
if !j! equ 0 (set y=%Y%整) else set y=%Y%
rem endlocal
rem ping 0 -n "2">nul&
goto X
:U
set y=已超出范围,请重新输入&goto X
goto :eof
:: 人民币金额大小写转换测试集
0 人民币零元整
1 人民币壹元整
2 人民币贰元整
3 人民币叁元整
4 人民币肆元整
5 人民币伍元整
6 人民币陆元整
7 人民币柒元整
8 人民币捌元整
9 人民币玖元整
10 人民币壹拾元整
100 人民币壹佰元整
1000 人民币壹仟元整
10000 人民币壹万元整
100000 人民币壹拾万元整
1000000 人民币壹佰万元整
10000000 人民币壹仟万元整
100000000 人民币壹亿元整
1000000000 人民币壹拾亿元整
10000000000 人民币壹佰亿元整
100000000000 人民币壹仟亿元整
1000000000000 人民币壹万亿元整
11 人民币壹拾壹元整
101 人民币壹佰零壹元整
111 人民币壹佰壹拾壹元整
1001 人民币壹仟零壹元整
1010 人民币壹仟零壹拾元整
1011 人民币壹仟零壹拾壹元整
1100 人民币壹仟壹佰元整
1101 人民币壹仟壹佰零壹元整
1111 人民币壹仟壹佰壹拾壹元整
10001 人民币壹万零壹元整
10010 人民币壹万零壹拾元整
10100 人民币壹万零壹佰元整
11000 人民币壹万壹仟元整
11100 人民币壹万壹仟壹佰元整
11110 人民币壹万壹仟壹佰壹拾元整
11111 人民币壹万壹仟壹佰壹拾壹元整
100001 人民币壹拾万零壹元整
100010 人民币壹拾万零壹拾元整
100100 人民币壹拾万零壹佰元整
101000 人民币壹拾万零壹仟元整
110000 人民币壹拾壹万元整
110001 人民币壹拾壹万零壹元整
110010 人民币壹拾壹万零壹拾元整
110100 人民币壹拾壹万零壹佰元整
111000 人民币壹拾壹万壹仟元整
100000001 人民币壹亿零壹元整
1000000001 人民币壹拾亿零壹元整
1000000010 人民币壹拾亿零壹拾元整
1000001000 人民币壹拾亿零壹仟元整
1000010000 人民币壹拾亿零壹万元整
1000100000 人民币壹拾亿零壹拾万元整
1010000000 人民币壹拾亿零壹仟万元整
0.0 人民币零元整
0.00 人民币零元整
0.1 人民币壹角
0.01 人民币壹分
0.10 人民币壹角
1.1 人民币壹元壹角
10.1 人民币壹拾元零壹角
11.1 人民币壹拾壹元壹角
10.01 人民币壹拾元零壹分
11.01 人民币壹拾壹元零壹分
100.1 人民币壹佰元零壹角
100.01 人民币壹佰元零壹分
1000.1 人民币壹仟元零壹角
1000.01 人民币壹仟元零壹分
10000.1 人民币壹万元零壹角
10000.01 人民币壹万元零壹分
100000.1 人民币壹拾万元零壹角
100000.01 人民币壹拾万元零壹分
¥.1 人民币壹角
¥.01 人民币壹分 COPY
小写:0  大写:零元整
小写:1  大写:壹元整
小写:2  大写:贰元整
小写:3  大写:叁元整
小写:4  大写:肆元整
小写:5  大写:伍元整
小写:6  大写:陆元整
小写:7  大写:柒元整
小写:8  大写:捌元整
小写:9  大写:玖元整
小写:10  大写:壹拾整
10 转换异常 返回:壹拾整 参考:人民币壹拾元整
小写:100  大写:壹佰整
100 转换异常 返回:壹佰整 参考:人民币壹佰元整
小写:1000  大写:壹仟整
1000 转换异常 返回:壹仟整 参考:人民币壹仟元整
小写:10000  大写:壹万整
10000 转换异常 返回:壹万整 参考:人民币壹万元整
小写:100000  大写:壹拾万元整
小写:1000000  大写:壹佰万元整
小写:10000000  大写:壹仟万元整
小写:100000000  大写:壹亿元整
小写:1000000000  大写:壹拾亿元万元整
1000000000 转换异常 返回:壹拾亿元万元整 参考:人民币壹拾亿元整
小写:10000000000  大写:壹佰亿元万元整
10000000000 转换异常 返回:壹佰亿元万元整 参考:人民币壹佰亿元整
小写:100000000000  大写:壹仟亿元万元整
100000000000 转换异常 返回:壹仟亿元万元整 参考:人民币壹仟亿元整
小写:1000000000000  大写:已超出范围,请重新输入
1000000000000 转换异常 返回:已超出范围,请重新输入 参考:人民币壹万亿元整
小写:11  大写:壹拾壹元整
小写:101  大写:壹佰零壹元整
小写:111  大写:壹佰壹拾壹元整
小写:1001  大写:壹仟零壹元整
小写:1010  大写:壹仟零壹拾整
1010 转换异常 返回:壹仟零壹拾整 参考:人民币壹仟零壹拾元整
小写:1011  大写:壹仟零壹拾壹元整
小写:1100  大写:壹仟壹佰整
1100 转换异常 返回:壹仟壹佰整 参考:人民币壹仟壹佰元整
小写:1101  大写:壹仟壹佰零壹元整
小写:1111  大写:壹仟壹佰壹拾壹元整
小写:10001  大写:壹万零壹元整
小写:10010  大写:壹万零壹拾整
10010 转换异常 返回:壹万零壹拾整 参考:人民币壹万零壹拾元整
小写:10100  大写:壹万零壹佰整
10100 转换异常 返回:壹万零壹佰整 参考:人民币壹万零壹佰元整
小写:11000  大写:壹万壹仟整
11000 转换异常 返回:壹万壹仟整 参考:人民币壹万壹仟元整
小写:11100  大写:壹万壹仟壹佰整
11100 转换异常 返回:壹万壹仟壹佰整 参考:人民币壹万壹仟壹佰元整
小写:11110  大写:壹万壹仟壹佰壹拾整
11110 转换异常 返回:壹万壹仟壹佰壹拾整 参考:人民币壹万壹仟壹佰壹拾元整
小写:11111  大写:壹万壹仟壹佰壹拾壹元整
小写:100001  大写:壹拾万元零壹元整
100001 转换异常 返回:壹拾万元零壹元整 参考:人民币壹拾万零壹元整
小写:100010  大写:壹拾万元零壹拾整
100010 转换异常 返回:壹拾万元零壹拾整 参考:人民币壹拾万零壹拾元整
小写:100100  大写:壹拾万元零壹佰整
100100 转换异常 返回:壹拾万元零壹佰整 参考:人民币壹拾万零壹佰元整
小写:101000  大写:壹拾万元壹仟整
101000 转换异常 返回:壹拾万元壹仟整 参考:人民币壹拾万零壹仟元整
小写:110000  大写:壹拾壹万整
110000 转换异常 返回:壹拾壹万整 参考:人民币壹拾壹万元整
小写:110001  大写:壹拾壹万零壹元整
小写:110010  大写:壹拾壹万零壹拾整
110010 转换异常 返回:壹拾壹万零壹拾整 参考:人民币壹拾壹万零壹拾元整
小写:110100  大写:壹拾壹万零壹佰整
110100 转换异常 返回:壹拾壹万零壹佰整 参考:人民币壹拾壹万零壹佰元整
小写:111000  大写:壹拾壹万壹仟整
111000 转换异常 返回:壹拾壹万壹仟整 参考:人民币壹拾壹万壹仟元整
小写:100000001  大写:壹亿元零壹元整
100000001 转换异常 返回:壹亿元零壹元整 参考:人民币壹亿零壹元整
小写:1000000001  大写:壹拾亿元万元零壹元整
1000000001 转换异常 返回:壹拾亿元万元零壹元整 参考:人民币壹拾亿零壹元整
小写:1000000010  大写:壹拾亿元万元零壹拾整
1000000010 转换异常 返回:壹拾亿元万元零壹拾整 参考:人民币壹拾亿零壹拾元整
小写:1000001000  大写:壹拾亿元万元壹仟整
1000001000 转换异常 返回:壹拾亿元万元壹仟整 参考:人民币壹拾亿零壹仟元整
小写:1000010000  大写:壹拾亿元零壹万整
1000010000 转换异常 返回:壹拾亿元零壹万整 参考:人民币壹拾亿零壹万元整
小写:1000100000  大写:壹拾亿元零壹拾万元整
1000100000 转换异常 返回:壹拾亿元零壹拾万元整 参考:人民币壹拾亿零壹拾万元整
小写:1010000000  大写:壹拾亿元壹仟万元整
1010000000 转换异常 返回:壹拾亿元壹仟万元整 参考:人民币壹拾亿零壹仟万元整
小写:0.0  大写:零万=元整
0.0 转换异常 返回:零万=元整 参考:人民币零元整
小写:0.00  大写:零万=元整
0.00 转换异常 返回:零万=元整 参考:人民币零元整
小写:0.1  大写:壹角
小写:0.01  大写:零壹分
0.01 转换异常 返回:零壹分 参考:人民币壹分
小写:0.10  大写:壹角
小写:1.1  大写:壹元壹角
小写:10.1  大写:壹拾壹角
10.1 转换异常 返回:壹拾壹角 参考:人民币壹拾元零壹角
小写:11.1  大写:壹拾壹元壹角
小写:10.01  大写:壹拾零壹分
10.01 转换异常 返回:壹拾零壹分 参考:人民币壹拾元零壹分
小写:11.01  大写:壹拾壹元零壹分
小写:100.1  大写:壹佰壹角
100.1 转换异常 返回:壹佰壹角 参考:人民币壹佰元零壹角
小写:100.01  大写:壹佰零壹分
100.01 转换异常 返回:壹佰零壹分 参考:人民币壹佰元零壹分
小写:1000.1  大写:壹仟壹角
1000.1 转换异常 返回:壹仟壹角 参考:人民币壹仟元零壹角
小写:1000.01  大写:壹仟零壹分
1000.01 转换异常 返回:壹仟零壹分 参考:人民币壹仟元零壹分
小写:10000.1  大写:壹万壹角
10000.1 转换异常 返回:壹万壹角 参考:人民币壹万元零壹角
小写:10000.01  大写:壹万零壹分
10000.01 转换异常 返回:壹万零壹分 参考:人民币壹万元零壹分
小写:100000.1  大写:壹拾万元壹角
100000.1 转换异常 返回:壹拾万元壹角 参考:人民币壹拾万元零壹角
小写:100000.01  大写:壹拾万元零壹分
小写:.1  大写:已超出范围,请重新输入
.1 转换异常 返回:已超出范围,请重新输入 参考:人民币壹角
小写:.01  大写:已超出范围,请重新输入
.01 转换异常 返回:已超出范围,请重新输入 参考:人民币壹分
天的白色影子

TOP

本帖最后由 lxf0356 于 2019-4-29 15:12 编辑
迷你版
smss 发表于 2019-4-19 15:30

借用你的代码,修改了一下,搞定了

TOP

回复  smss


    求修改
1、从粘贴板获取金额,运行后,再输出大写金额到粘贴板。
2、能识别千分符。 ...
lxf0356 发表于 2019-4-21 00:05




http://bbs.bathome.net/thread-8329-1-1.html

TOP

回复 8# smss


    求修改
1、从粘贴板获取金额,运行后,再输出大写金额到粘贴板。
2、能识别千分符。

TOP

本帖最后由 smss 于 2019-4-21 11:42 编辑

迷你版
@echo off&setlocal EnableDelayedExpansion
set a=零壹贰叁肆伍陆柒捌玖
set b=分角元拾佰仟万拾佰仟亿拾佰仟
set "Z=999999999999.99"
:X
color 0d
setlocal
::对输入数字处理,取出整数和小数
set /p Z=请输入金额:
if /i "%Z%"=="q" exit
if "%Z%"=="0" echo 零元整&goto X
for /f "tokens=1,2 delims=." %%a in ('echo;%Z%^|findstr /b /e "[1-9][0-9]* 0 [1-9][0-9]*\.[0-9]* 0\.[0-9]*"') do (set Z2=%%b00&set Z=%%a!Z2:~0,2!&set "i=%%a"&set "j=%%b")
if defined i (if defined j (if "%j:~2%" NEQ "" (goto U) else if "%i:~12%" NEQ "" (goto U) else (goto Y)
) else if "%i:~12%" NEQ "" (goto U) else (goto Y)) else (goto U)
:Y
call set Y=%%a:~%Z:~-1,1%,1%%%%b:~%bit%,1%%%Y%
set /a bit+=1
set Z=%Z:~0,-1%
if not "%Z%"=="" goto Y
set Y=%Y:零壹=壹%
set Y=%Y:零贰=贰%
set Y=%Y:零叁=叁%
set Y=%Y:零肆=肆%
set Y=%Y:零伍=伍%
set Y=%Y:零柒=柒%
set Y=%Y:零捌=捌%
set Y=%Y:零玖=玖%
set Y=%Y:零仟=零%
set Y=%Y:零佰=零%
set Y=%Y:零拾=零%
set Y=%Y:零零零=零%
set Y=%Y:零零=零%
set Y=%Y:零万=万元%
set Y=%Y:零亿=亿元%
set Y=%Y:零零=零%
set Y=%Y:零分=零%
set Y=%Y:零角=零%
set Y=%Y:角零=角%
set Y=%Y:零零=%
set Y=%Y:零亿=亿%
set Y=%Y:零万=万%
set Y=%Y:零元=%
set Y=%Y:零万=元%
set Y=%Y:亿万=亿%
color 0b
if !j! equ 0 (echo %Y%整) else echo %Y%
endlocal
ping 0 -n "2">nul&goto X
:U
echo 已超出范围,请重新输入&goto XCOPY

TOP

不可说不可说
[url=][/url]

TOP

本帖最后由 smss 于 2019-4-20 18:17 编辑

上至千极下至小数点后12位 范围0~9999999999999999999999999999999999999999999999999999.999999999999
2019.4.20修复已知BUG
@echo off&setlocal enabledelayedexpansion
set unit=仟佰拾极仟佰拾载仟佰拾正仟佰拾涧仟佰拾沟仟佰拾穰仟佰拾秭仟佰拾垓仟佰拾京仟佰拾兆仟佰拾亿仟佰拾万仟佰拾元
set "Z=9999999999999999999999999999999999999999999999999999.999999999999"
:X
color 0d
set /p Z=请输入数字:
if /i "%Z%"=="q" exit
if "%Z%"=="0" echo 零元整&goto X
for /f "tokens=1,2delims=." %%i in ('echo;%Z%^|findstr /b /e "[1-9][0-9]* 0 [1-9][0-9]*\.[0-9]* 0\.[0-9]*"') do (set "a=%%i"&set "b=%%j")
if defined a (if defined b (if "%b:~12%" NEQ "" (goto U) else if "%a:~52%" NEQ "" (goto U) else (goto Y)
) else if "%a:~52%" NEQ "" (goto U) else (goto Y)) else (goto U)
goto X
:Y
set Y=
for /f "tokens=1,2 delims=." %%a in ("%Z%") do set "Z=%%a"&set "frac=%%b"
if defined frac (set frac=!frac:~0,12!&set m=!frac:~0,1!&if !m! gtr 0 set Y=!m!
set m=!frac:~1,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~2,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~3,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~4,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~5,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~6,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~7,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~8,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~9,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~10,1!&if !m! gtr 0 set Y=!Y!!m!
set m=!frac:~11,1!&if !m! gtr 0 set Y=!Y!!m!渺)
set n=0
for /l %%a in (0,1,100) do if not "!Z:~%%a,1!"=="" set /a n+=1
if not %Z% equ 0 (for /l %%a in (1,1,%n%) do (set bit=!Z:~-%%a,1!&if not "bit"=="" (set m=!unit:~-%%a,1!&set "Y=!bit!!m!!Y!"
)))
set Y=%Y:0=零%
set Y=%Y:1=壹%
set Y=%Y:2=贰%
set Y=%Y:3=叁%
set Y=%Y:4=肆%
set Y=%Y:5=伍%
set Y=%Y:6=陆%
set Y=%Y:7=柒%
set Y=%Y:8=捌%
set Y=%Y:9=玖%
set Y=%Y:零仟=零%
set Y=%Y:零佰=零%
set Y=%Y:零拾=零%
set Y=%Y:零零零=零%
set Y=%Y:零零=零%
set Y=%Y:零极=极%
set Y=%Y:零载=载%
set Y=%Y:零正=正%
set Y=%Y:零涧=涧%
set Y=%Y:零沟=沟%
set Y=%Y:零穰=穰%
set Y=%Y:零秭=秭%
set Y=%Y:零垓=垓%
set Y=%Y:零京=京%
set Y=%Y:零兆=兆%
set Y=%Y:零亿=亿%
set Y=%Y:零万=万%
set Y=%Y:零元=元%
set Y=%Y:零壹=壹%
set Y=%Y:零贰=贰%
set Y=%Y:零叁=叁%
set Y=%Y:零肆=肆%
set Y=%Y:零伍=伍%
set Y=%Y:零柒=柒%
set Y=%Y:零捌=捌%
set Y=%Y:零玖=玖%
set Y=%Y:极载正涧沟穰秭垓京兆亿万=极%
set Y=%Y:载正涧沟穰秭垓京兆亿万=载%
set Y=%Y:正涧沟穰秭垓京兆亿万=正%
set Y=%Y:涧沟穰秭垓京兆亿万=涧%
set Y=%Y:沟穰秭垓京兆亿万=沟%
set Y=%Y:穰秭垓京兆亿万=穰%
set Y=%Y:秭垓京兆亿万=秭%
set Y=%Y:垓京兆亿万=垓%
set Y=%Y:京兆亿万=京%
set Y=%Y:兆亿万=兆%
set Y=%Y:极载=极%
set Y=%Y:载正=载%
set Y=%Y:正涧=正%
set Y=%Y:涧沟=涧%
set Y=%Y:正涧=正%
set Y=%Y:沟穰=沟%
set Y=%Y:穰秭=穰%
set Y=%Y:秭垓=秭%
set Y=%Y:垓京=垓%
set Y=%Y:京兆=京%
set Y=%Y:兆亿=兆%
set Y=%Y:亿万=亿%
set Y=%Y:穰垓=穰%
set Y=%Y:载正涧沟穰秭垓京兆亿=%
set Y=%Y:载正涧沟穰秭垓京兆=%
set Y=%Y:载正涧沟穰秭垓京=%
set Y=%Y:载正涧沟穰秭垓=%
set Y=%Y:载正涧沟穰秭=%
set Y=%Y:载正涧沟穰=%
set Y=%Y:载正涧沟穰=%
set Y=%Y:载正涧沟=%
set Y=%Y:载正涧=%
set Y=%Y:正涧沟穰秭垓京兆亿=%
set Y=%Y:涧沟穰秭垓京兆亿=%
set Y=%Y:沟穰秭垓京兆亿=%
set Y=%Y:穰秭垓京兆亿=%
set Y=%Y:秭垓京兆亿=%
set Y=%Y:垓京兆亿=%
set Y=%Y:京兆亿=%
set Y=%Y:正沟秭京亿=%
set Y=%Y:正沟秭京=%
set Y=%Y:正沟秭=%
set Y=%Y:正沟=%
color 0b
if !frac! equ 0 (echo %Y%整) else echo %Y%
ping 0 -n "2">nul&goto X
:U
echo 已超出范围,请重新输入&goto XCOPY
3

评分人数

TOP

回复 4# lxf0356


    clip 命令可以操作剪贴板,你试试看。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher
先谢谢管理员,我也正需要这样的批处理。
求修改
1、从粘贴板获取金额,运行后,再输出大写金额到粘贴板。
2、能识别千分符。
谢谢了。
:: 人民币大小写互转程序 R3
:: qzwqzw http://bbs.cn-dos.net
:: 2007-01-03 11:15
:: 出处:http://www.cn-dos.net/forum/viewthread.php?tid=26288
@echo off
setlocal EnableDelayedExpansion
for /l %%i in (1,1,100) do (
    set /a numin=!random!*50001-50000000
    set numin=!numin:~0,-2!.!numin:~-2!
    set in=!numin!
    call :Num2RMB
    set in=!out!
    call :RMB2Num
    echo.%%i [!numin!:!in!:!out!]
    if !numin! neq !out! set /p=--- Invalid ---
    set out=
)
if "%~0"=="%~f0" pause
endlocal
goto :eof
:Num2RMB
setlocal
set num=%in%
set num=0%num%
for /f "tokens=1,2,* delims=." %%f in ("%num%") do (
    set num2=%%g00
    set num=%%f!num2:~0,2!
    if not "%%h"=="" goto :eof
)
:del_pre0
if "%num:~0,1%"=="0" (
    set num=%num:~1%
    goto del_pre0
)
:checknum
set num=%num:,=%
set /a num2=num+0
if not "%num%"=="%num2%" goto :eof
if %num% geq 1000000000000 goto :eof
if %num% leq 0 goto :eof
set tbl1=零壹贰叁肆伍陆柒捌玖
set tbl2=分角元拾佰仟万拾佰仟亿拾佰仟
:n2r_loop
call set rmb=%%tbl1:~%num:~-1,1%,1%%%%tbl2:~%bit%,1%%%rmb%
set /a bit+=1
set num=%num:~0,-1%
if not "%num%"=="" goto n2r_loop
set rmb=%rmb:零拾=零%
set rmb=%rmb:零佰=零%
set rmb=%rmb:零仟=零%
set rmb=%rmb:零零=零%
set rmb=%rmb:零零=零%
set rmb=%rmb:零元=元零%
set rmb=%rmb:零万=万零%
set rmb=%rmb:零亿=亿零%
set rmb=%rmb:零零=零%
set rmb=%rmb:零分=零%
set rmb=%rmb:零角=零%
set rmb=%rmb:角零=角%
set rmb=%rmb:零零=整%
endlocal & set out=%rmb%
goto :eof
::Num2RMB
:RMB2Num
setlocal
set rmb=%in%
set rmb=%rmb:零=%
set rmb=%rmb:整=%
set tbl1=零壹贰叁肆伍陆柒捌玖
set tbl2=分角元拾佰仟万拾佰仟亿拾佰仟
for /l %%i in (1,1,9) do call set rmb%%tbl1:~%%i,1%%=%%i
:r2n_loop
if "%tbl2:~0,1%"=="%rmb:~-1,1%" (
    set rmb=!rmb:~0,-1!
    call set tmp=%%rmb!rmb:~-1,1!%%
    if not "!tmp!"=="" (
        set num=!tmp!!num!
        set rmb=!rmb:~0,-1!
    ) else (
        set num=0!num!
    )
) else (
    set num=0!num!
)
set tbl2=%tbl2:~1%
if not "%rmb%"=="" if not "%tbl2%"=="" goto r2n_loop
set num=%num:~0,-2%.%num:~-2%
endlocal & set out=%num%
goto :eof
::RMB2NumCOPY

TOP

回复 2# Batcher


    之前在咱们论坛搜索竟然搜不到,多谢了!

TOP

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表