[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 15# hfxiang

中文数字大小写混合输入的问题,其实可用一个前置字典替换解决。此处不再复贴一楼全版代码了,有需求者可将如下代码行插入一楼代码第5行之后即可。
  1. for %%v in ("壹=一", "贰=二", "叁=三", "肆=四", "伍=五", "陆=六", "柒=七", "捌=八", "玖=九", "拾=十", "佰=百", "仟=千") do (set "cn=!cn:%%~v!")
复制代码

TOP

回复 16# aloha20200628
把楼主的ChangeCnToAn9999子过程修改如下,经不完全测试,好像也能实现对大写的兼容:
  1. :: 最小段位转换函数》输出范围={ 0~9999 }
  2. :ChangeCnToAn9999 // %1=中文数字符串(实值) %2=返回值变量名
  3. if "%~1"=="零" set "%~2=0"&exit/b
  4. set "cn#=%~1" &set "cn#=!cn#:零=!"&set "uList=十,拾,百,佰,千,仟"
  5. set/a "n#=0,一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9,十=10,百=100,千=1000"
  6. set/a "n#=0,壹=1,贰=2,叁=3,肆=4,伍=5,陆=6,柒=7,捌=8,玖=9,拾=10,佰=100,仟=1000"
  7. for /L %%k in (0,2,6,8,10,12) do if "!cn#:~%%k,1!" neq "" (
  8.     set "n2c=!cn#:~%%k,2!" &set "nc1=!n2c:~0,1!" &set "nc2=!n2c:~1,1!"
  9.     if "!nc2!"=="" (set/a n#+=!nc1!) else for %%c in (!nc2!) do (
  10.         if "!uList:%%c=!" neq "!uList!" (set/a n#+=!nc1!*!nc2!) else (set/a n#+=!nc1!+!nc2!)
  11.     )
  12. )
  13. set "%~2=!n#!" &exit/b
复制代码

TOP

回复 17# hfxiang

只要能经受各种测试就好...

TOP

本帖最后由 terse 于 2024-4-1 08:08 编辑

处理大数
头两行加上了
修正一下亿位的处理,发现bug再修正
  1. @echo off&setlocal enabledelayedexpansion
  2. set/a "零=0,一=1,二=2,三=3,四=4,五=5,六=6,七=7,八=8,九=9,十=10,百=100,千=1000,万=10000,亿=100000"
  3. set "str=八十二亿零十"
  4. set "s=!str!
  5. if "!s:~16!" neq "" (set len=16&set "s=!s:~16!") else set len=0
  6. set "s=!s!fedcba9876543210"
  7. set /a "len+=0x!s:~16,1!,result=content=num=0"
  8. set "stry="
  9. for /l %%i in (0,1,!len!) do for /f %%j in ("!str:~%%i,1!") do (
  10.      if !%%j! geq 10 (
  11.         if !%%j! gtr 1000 (
  12.             if !%%j! gtr 10000 (
  13.               set /a stry=result+content+num,result=content=0"
  14.               set stry=!stry!00000000
  15.           )else set /a "content=(content+num)*%%j,result+=content,content=0"
  16.         ) else set /a "num+=^!num,content+=num*%%j"
  17.         set "num=0"
  18.      ) else if !%%j! neq 0 set num=!%%j!
  19. )
  20. set /a "result+=content+num
  21. if defined stry (
  22.    set "s1=!stry!fedcba9876543210"
  23.    set "s2=!result!fedcba9876543210"
  24.    set /a "len=0x!s1:~16,1!-0x!s2:~16,1!"
  25.    for /f %%i in ("!len!") do echo !str! "!stry:~,%%i!!result!"
  26. ) else echo;!str! !result!
  27. pause
复制代码

TOP

本帖最后由 Ru_Evan 于 2024-3-31 20:01 编辑

之前写了一个,不知道放哪了。。步骤是将中文数字以亿、万分割得到三组中文数字,再分别处理三组中文数字转换成阿拉伯数字,最后三组阿拉伯数字相加而得。

TOP

本帖最后由 Ru_Evan 于 2024-3-31 20:02 编辑

。。。。。

TOP

本帖最后由 Five66 于 2024-3-31 23:58 编辑

回复 19# terse


   犯傻了 , 已编辑

TOP

回复 22# Five66

已编辑

TOP

返回列表