返回列表 发帖
  1. ::code by youxi01@cn-dos.net
  2. ::date 2006-1-1(Happy new year!best wishes to everyone!)
  3. @echo off
  4. setlocal enabledelayedexpansion
  5. set /a a=0,b=0,c=0
  6. ::================================
  7. ::设置单位名称;
  8. SET NAME0=仟
  9. SET NAME1=佰
  10. SET NAME2=拾
  11. SET NAME3=
  12. ::================================
  13. ::=============================================
  14. ::设置数字对应的大写中文汉字
  15. for %%i in (零 壹 贰 叁 肆 伍 陆 柒 捌 玖) do (
  16.      set BIG!a!=%%i
  17.      set /a a+=1)
  18. ::=============================================
  19. ::=======================================================================
  20. ::在以下“函数”的处理过程中,要用到"#"对数字进行对齐(都成四位),以便截取;
  21. ::这里设置凡是出现"#"的地方都设置为空。
  22. set BIG#=
  23. ::=======================================================================
  24. set EN=
  25. ::====================================================
  26. ::这里对输入的数字进行处理,分别取出整数部分和小数部分;
  27. set /p EN=请输入金钱数(1000亿以内):
  28. for /f "tokens=1,2* delims=." %%i in ("%EN%") do (
  29.       set "round=%%i"
  30.       set "dec=%%j00" 2>nul)
  31. ::=====================================================
  32. set /a round=%round:,=%
  33. set dec=%dec:~0,2%
  34. :test
  35.    set /a b+=1
  36.    ::=============================================
  37.    ::每四位数字为一组,对原来的数据进行截取;
  38.    if %round% gtr 9999 (
  39.       set num!b!=!round:~-4!
  40.       set round=!round:~0,-4!
  41.       goto :test) else set num!b!=!round!
  42.    ::==============================================
  43. ::=====================================================
  44. ::分别对1、2、3段数据进行处理;分别赋予单位:元、万、亿
  45. ::同时,分别将返回的数据传给str1,str2,str3(利用%3来控制)。
  46. call :test1 %num1% 元 1
  47. call :test1 %num2% 万 2
  48. call :test1 %num3% 亿 3
  49. ::======================================================
  50. ::====================================================================
  51. ::去掉数字大写里多余的"零"。比如,1002,处理后读出来为:"壹千零贰元整"
  52. ::符合我们中国人一般的读数方法;同时将结果分别传入str1,str2,str3(%2控制)。
  53. call :test2 %str1% 1
  54. call :test2 %str2% 2
  55. call :test2 %str3% 3
  56. ::=====================================================================
  57. ::==============================================================
  58. ::防止类似2,0000,1002.00形式出现错误(错误读为:2亿万1千零2元整)
  59. if "!str2!"=="零万" set str2=零
  60. ::===============================================================
  61. set str=%str3%%str2%%str1%
  62. set str=%str:零元=元%
  63. set str=%str:零万=万%
  64. set str=%str:零亿=亿%
  65. ::防止整数部分为0;
  66. if "%str%"=="元" set str=零元
  67. ::对小数部分数字进行处理;
  68. if "%dec%"=="00" (set dec=整) else (
  69.     set /a dec1=!dec:~0,1!
  70.     set /a dec2=!dec:~1,1!
  71.     if !dec1! EQU 0 (set dec1=零) else call set dec1=%%BIG!dec1!%%角
  72.     if !dec2! EQU 0 (set dec2=) else call set dec2=%%BIG!dec2!%%分
  73.     set dec=!dec1!!dec2!
  74. )
  75. echo.
  76. echo ========================
  77. echo 你输入的金钱数目大写为:
  78. echo.
  79. echo %str:零零=零%%dec%
  80. echo ========================
  81. pause>nul
  82. :test1
  83.     if not "%1"=="" (
  84.         set temp=####%1
  85.         set temp=!temp:~-4!
  86.         for /l %%i in (0 1 3) do (
  87.                set tmp%%i=!temp:~%%i,1!
  88.                if defined tmp%%i (
  89.                   if !tmp%%i! GTR 0 (call set str%3=!str%3!%%BIG!tmp%%i!%%!NAME%%i!) else (
  90.                          call set str%3=!str%3!%%BIG!tmp%%i!%%)))
  91.        set str%3=!str%3!%2
  92.        ) else set str%3=
  93.      goto :eof
  94. :test2
  95.      set tmp=%1
  96.      set tmp=%tmp:零零=零%
  97.      set str%2=%tmp:零零=零%
复制代码
原始出处 http://www.cn-dos.net/forum/viewthread.php?tid=26230#pid162959

TOP

  1. :: 人民币金额小写转大写
  2. :: qzwqzw@bbs.cn-dos.net
  3. :: 2007-01-01
  4. @echo off
  5. setlocal EnableDelayedExpansion
  6. set tbl1=零壹贰叁肆伍陆柒捌玖
  7. set tbl2=分角元拾佰仟万拾佰仟亿拾佰仟
  8. :test
  9. cls
  10. setlocal
  11. set /p num=请输入小写金额(小于一万亿元,直接回车退出):
  12. if "%num%"=="" goto :eof
  13. set num=%num:,=%
  14. set num=0%num%
  15. for /f "tokens=1,2,* delims=." %%f in ("%num%") do (
  16.     set num2=%%g00
  17.     set num=%%f!num2:~0,2!
  18.     if not "%%h"=="" goto :error
  19. )
  20. :del_pre0
  21. if not "%num:~0,1%"=="0" goto checknum
  22. set num=%num:~1%
  23. goto del_pre0
  24. :checknum
  25. set /a num2=num+0
  26. if "%num%"=="%num2%" goto loop
  27. :error
  28. echo.
  29. echo 输入小写金额无效!
  30. echo.
  31. pause
  32. goto test
  33. :loop
  34. call set rmb=%%tbl1:~%num:~-1,1%,1%%%%tbl2:~%bit%,1%%%rmb%
  35. set /a bit+=1
  36. set num=%num:~0,-1%
  37. if not "%num%"=="" goto loop
  38. set rmb=%rmb:零拾=零%
  39. set rmb=%rmb:零佰=零%
  40. set rmb=%rmb:零仟=零%
  41. set rmb=%rmb:零零=零%
  42. set rmb=%rmb:零零=零%
  43. set rmb=%rmb:零元=元零%
  44. set rmb=%rmb:零万=万零%
  45. set rmb=%rmb:零亿=亿零%
  46. set rmb=%rmb:零零=零%
  47. set rmb=%rmb:零分=零%
  48. set rmb=%rmb:零角=零%
  49. set rmb=%rmb:角零=角%
  50. set rmb=%rmb:零零=整%
  51. echo.
  52. echo 人民币%rmb%
  53. echo.
  54. pause
  55. endlocal
  56. goto test
复制代码
原始出处 http://www.cn-dos.net/forum/viewthread.php?tid=26230#pid163016

TOP

返回列表