| ::code by youxi01@cn-dos.net |
| ::date 2006-1-1(Happy new year!best wishes to everyone!) |
| @echo off |
| setlocal enabledelayedexpansion |
| set /a a=0,b=0,c=0 |
| |
| ::================================ |
| ::设置单位名称; |
| SET NAME0=仟 |
| SET NAME1=佰 |
| SET NAME2=拾 |
| SET NAME3= |
| ::================================ |
| |
| ::============================================= |
| ::设置数字对应的大写中文汉字 |
| for %%i in (零 壹 贰 叁 肆 伍 陆 柒 捌 玖) do ( |
| set BIG!a!=%%i |
| set /a a+=1) |
| ::============================================= |
| |
| ::======================================================================= |
| ::在以下“函数”的处理过程中,要用到"#"对数字进行对齐(都成四位),以便截取; |
| ::这里设置凡是出现"#"的地方都设置为空。 |
| set BIG#= |
| ::======================================================================= |
| |
| set EN= |
| |
| ::==================================================== |
| ::这里对输入的数字进行处理,分别取出整数部分和小数部分; |
| |
| set /p EN=请输入金钱数(1000亿以内): |
| for /f "tokens=1,2* delims=." %%i in ("%EN%") do ( |
| set "round=%%i" |
| set "dec=%%j00" 2>nul) |
| ::===================================================== |
| set /a round=%round:,=% |
| set dec=%dec:~0,2% |
| |
| :test |
| set /a b+=1 |
| ::============================================= |
| ::每四位数字为一组,对原来的数据进行截取; |
| if %round% gtr 9999 ( |
| set num!b!=!round:~-4! |
| set round=!round:~0,-4! |
| goto :test) else set num!b!=!round! |
| ::============================================== |
| |
| ::===================================================== |
| ::分别对1、2、3段数据进行处理;分别赋予单位:元、万、亿 |
| ::同时,分别将返回的数据传给str1,str2,str3(利用%3来控制)。 |
| call :test1 %num1% 元 1 |
| call :test1 %num2% 万 2 |
| call :test1 %num3% 亿 3 |
| ::====================================================== |
| |
| ::==================================================================== |
| ::去掉数字大写里多余的"零"。比如,1002,处理后读出来为:"壹千零贰元整" |
| ::符合我们中国人一般的读数方法;同时将结果分别传入str1,str2,str3(%2控制)。 |
| call :test2 %str1% 1 |
| call :test2 %str2% 2 |
| call :test2 %str3% 3 |
| ::===================================================================== |
| |
| ::============================================================== |
| ::防止类似2,0000,1002.00形式出现错误(错误读为:2亿万1千零2元整) |
| if "!str2!"=="零万" set str2=零 |
| ::=============================================================== |
| |
| set str=%str3%%str2%%str1% |
| set str=%str:零元=元% |
| set str=%str:零万=万% |
| set str=%str:零亿=亿% |
| |
| ::防止整数部分为0; |
| if "%str%"=="元" set str=零元 |
| |
| ::对小数部分数字进行处理; |
| if "%dec%"=="00" (set dec=整) else ( |
| set /a dec1=!dec:~0,1! |
| set /a dec2=!dec:~1,1! |
| if !dec1! EQU 0 (set dec1=零) else call set dec1=%%BIG!dec1!%%角 |
| if !dec2! EQU 0 (set dec2=) else call set dec2=%%BIG!dec2!%%分 |
| set dec=!dec1!!dec2! |
| ) |
| echo. |
| echo ======================== |
| echo 你输入的金钱数目大写为: |
| echo. |
| echo %str:零零=零%%dec% |
| echo ======================== |
| pause>nul |
| |
| :test1 |
| if not "%1"=="" ( |
| set temp=####%1 |
| set temp=!temp:~-4! |
| for /l %%i in (0 1 3) do ( |
| set tmp%%i=!temp:~%%i,1! |
| if defined tmp%%i ( |
| if !tmp%%i! GTR 0 (call set str%3=!str%3!%%BIG!tmp%%i!%%!NAME%%i!) else ( |
| call set str%3=!str%3!%%BIG!tmp%%i!%%))) |
| set str%3=!str%3!%2 |
| ) else set str%3= |
| goto :eof |
| |
| :test2 |
| set tmp=%1 |
| set tmp=%tmp:零零=零% |
| set str%2=%tmp:零零=零%COPY |