Board logo

标题: [数值计算] 批处理能否直接计算文本中列出的算式? [打印本页]

作者: logictianjin    时间: 2011-2-20 18:09     标题: 批处理能否直接计算文本中列出的算式?

本帖最后由 pcl_test 于 2016-11-26 02:52 编辑

例:文本a.txt中有若干算式
1+1+1+1+1+1+1
2+3+4++6++7+8+9
500-5-7-8
5+4-2
等等
能否用批处理将这些算式进行计算?
作者: 随风    时间: 2011-2-20 18:42

哈哈哈,正好这几天在搞这个,输入法中计算剪贴板中的算式,vbs代码。
批处理版的试试这个 ^_^
  1. @echo off&set jiluk=&set /a jilu=0,xsljjg=0,xiaosu=10
  2. title %~n0 智能计算器2 by 随风 @bbs.bathome.cn @2009-02-22
  3. set sangcijg=&set "pi=3.1415926535897932384626433832795"
  4. setlocal enabledelayedexpansion&set "lin=00000"
  5. for /l %%a in (1 1 5) do set "lin=!lin!!lin!!lin!"
  6. :kaisi
  7. set yyd=&color cf
  8. echo.&echo.                        欢迎使用 智能批处理计算器
  9. echo.&echo.&echo.  首次使用请先仔细阅读使用说明
  10. echo.&echo.  本代码源自 《批处理之家论坛》 bbs.bathome.cn
  11. echo.&echo.  使用中若发现 bug 请去该处反馈、谢谢 ^^!^^!^^!
  12. echo.&echo.&echo.&echo.  重要声明:
  13. echo.&echo.  本代码为 bat 批处理业余爱好者编写
  14. echo.&echo.  可任意转载、使用、但若因此导致的任何错误、损失、本人概不负责。
  15. echo.&echo.&echo.
  16. echo.  请选择: 1 阅读使用说明   2 进入对文本操作界面   3 进入手动界面
  17. :kaisi2
  18. echo.&set xuanze=&set /p xuanze=   &cls
  19. if "%xuanze%"=="3" color 1f&goto start0
  20. if not defined xuanze color 1f&goto start0
  21. if defined yyd if "!xuanze!"=="1" cls&goto kaisi
  22. if "%xuanze%"=="1" (
  23.   call :ydsuom "%~0"
  24.   set yyd=a&echo.&echo.
  25.   echo.    请选择:1 返回首页   2 进入对文本操作界面   3 进入手动界面
  26.   goto kaisi2
  27. )
  28. if not "%xuanze%"=="2" cls&goto kaisi
  29. :wbjm 文本界面
  30. cls&color 1f
  31. echo.&echo.  直接回车返回首页。
  32. echo.&echo.  按 3 进入手动输入算式界面。
  33. echo.&echo.  请输入文件名全名及全路径,或拖放文件来此。
  34. echo.&set wenben=&set /p wenben= &cls&set baocun=temp.txt
  35. if "!wenben!"=="3" cls&goto start0
  36. if not defined wenben cls&goto kaisi
  37. set "wenben=%wenben:"=%"
  38. if not exist "%wenben%" echo  文件不存在。。&ping/n 3 127.0>nul&goto wbjm
  39. echo.&echo. 正在计算 %wenben:"=% 中的算式,结果保存在 %baocun% 中
  40. echo.&echo. 请稍候 。。。&echo.
  41. setlocal&cd.>"%baocun%"
  42. for /f "usebackq delims=" %%a in ("%wenben%") do (
  43.    call :start0 "%%a" okk
  44.    >>"%baocun%" echo !okk!
  45. )
  46. start "" "%baocun%"
  47. exit
  48. :start0
  49. setlocal
  50. if "!wenben!"=="3" set "wenben="
  51. if defined wenben set suru=%~1&goto wenben
  52. echo.&echo. 累计储存结果:%xsljjg%
  53. echo.&echo.  %sangcijg%
  54. echo.&echo.&echo.&echo. 输入 bz 查看帮助
  55. echo.&echo. 请输入算式 如:-7+{2+[1+(3+-2*0.5--2*2+3)]+[3*(9--8*2)]*5/2}--2+5=
  56. echo.&set "suru="&set /p suru= &cls
  57. if "!suru!"=="bz" (
  58.    call :ydsuom "%~0"
  59.    echo.&echo.    按任意键返回 。。。&pause>nul&cls&color 1f
  60.    endlocal&set xsljjg=%jilu%&goto start0
  61. )
  62. if not defined suru endlocal&cls&set xsljjg=%jilu%&goto start0
  63. set "suru=%suru: =%"
  64. if "!suru:~-1!"=="+" set jiluk=a&set "bq=+"
  65. if "!suru:~-1!"=="-" set jiluk=a&set "bq=-"
  66. if "!suru:~-1!"=="*" set jiluk=a&set "bq=*"
  67. if "!suru:~-1!"=="/" set jiluk=a&set "bq=/"
  68. if "!suru:~-1!"=="." set jiluk=a&set jilu=0&set "bq=+"
  69. if defined jiluk set suru=!suru:~0,-1!
  70. :wenben
  71. set "suru=%suru: =%"
  72. if "!suru:~0,1!"=="." set "suru=0!suru!"
  73. for %%a in (c + - / ^( [ {) do set "suru=!suru:%%a.=%%a0.!"
  74. if "%suru:~-1%"=="=" set "suru=%suru:~0,-1%"
  75. echo.&echo.正在计算:  %suru% =
  76. set xsjg=%suru% =
  77. :::从这里开始
  78. set "ok="
  79. if "%suru:~0,1%"=="-" set "suru=f%suru:~1%"
  80. call :lis1 "%suru%" ok
  81. set "ok=!Ok:~1!"
  82. for %%a in (c + - / ^( [ {) do set "ok=!ok:%%a-=%%af!"
  83. for /l %%a in (0 1 9) do (
  84.   set ok=!ok:%%a^(=%%ac^(!
  85.   set ok=!ok:^)%%a=^)c%%a!
  86.   set "ok=!ok:%%a[=%%ac[!"
  87.   set "ok=!ok:]%%a=]c%%a!"
  88.   set "ok=!ok:%%a{=%%ac{!"
  89.   set "ok=!ok:}%%a=}c%%a!"
  90. )
  91. set "ok=!ok:pi=%pi%!"
  92. set "ok=0+!ok!+0"
  93. call :cif "!ok!" ok
  94. for %%g in ("()" "[]" "{}") do (
  95.   set "kuoh=%%~g"
  96.   call :lisxh "!ok!" ok
  97. )
  98. call :liscc "!ok!" ok
  99. call :lisjj "!ok!" ok
  100. set ok=!ok:f=-!
  101. ::完成计算
  102. set lecs=&set "cucw="
  103. if defined jiluk (
  104.    set "okok=!ok!"
  105.    set "leiji=!okok! !bq! !jilu!"
  106.    if "!bq!"=="/" if "!jilu!"=="0" (
  107.       set bq=*&set /a okok=1
  108.       set "leiji=0 + !jilu!"
  109.       set lecs=以零为除数的错误。累计储存结果不变。。。
  110.     )
  111.    if "!ok!"=="以零为除数的错误。" (
  112.       set lecs=以零为除数的错误。累计储存结果不变。。。
  113.       set "leiji=0 + !jilu!"
  114.       set bq=+&set /a okok=0
  115.     )
  116.    call :start "^(!okok!^)!bq!^(!jilu!^)" jilu
  117. )
  118. if defined wenben endlocal&set %~2=%xsjg% %ok%&goto :EOF
  119. cls&set xsljjg=!jilu!  !lecs!
  120. set sangcijg=!xsjg! !ok!   !cucw!
  121. if defined jiluk (
  122.   endlocal&set jilu=%jilu%&set "xsljjg=%xsljjg%"&set "sangcijg=%sangcijg%"
  123. ) else endlocal&set "sangcijg=%sangcijg%"
  124. goto start0
  125. goto :EOF
  126. :lisxh 处理各种()[]{}括弧
  127. for /f "tokens=1,2* delims=%kuoh%" %%a in ("%~1") do (
  128.    if "%%b"=="" set %~2=!ok!&goto :EOF
  129.    call :liscc "%%b" ok
  130.    call :lisjj "!ok!" ok
  131.    set "ok=!ok:-=f!"
  132.    set "ok=%%a!ok!%%c"
  133.    call :lisxh "!ok!" ok
  134. )
  135. goto :EOF
  136. :liscc 计算连续乘除
  137. set ph=%~1&set q=&set h=&set aa=&set n=0
  138. set ph=!ph:c= c# !&set ph=!ph:/= /@ !
  139. set ph=!ph:+= + !&set ph=!ph:-= - !
  140. for /f "tokens=1* delims=c/" %%a in ("!ph!") do (
  141.    if "%%b"=="" set %~2=!ph: =!&goto :EOF
  142.    for %%i in (%%a) do set q=!q!!aa!&set "aa=%%i"
  143.    for %%i in (%%b) do set /a n+=1&set "m!n!=%%i"
  144.    for /l %%i in (3 1 !n!) do set h=!h!!m%%i!
  145.    if "!m1!"=="#" (set m1=*) else set "m1=/"
  146.    set "js=^(!aa:f=-!^)!m1!^(!m2:f=-!^)"
  147.    if not "!h!"=="" set h=!h:c#=c!&set "h=!h:/@=/!"
  148.    call :start "!js!" ph
  149.    if "!ph!"=="以零为除数的错误。" set q=&set "h="
  150.    set "ph=!ph:-=f!"
  151.    set "ph=!q!!ph:-=f!!h!"
  152.    set "ph=!ph:/@=/!"
  153.    call :liscc "!ph!" ph
  154. )
  155. set "%~2=!ph: =!"
  156. goto :EOF
  157. :lisjj 计算连续加减
  158. set he=&set js=%~1
  159. set js=!js:+= +!&set js=!js:-= -!
  160. for %%a in (!js!) do (
  161.    set "b=%%a"
  162.    if defined he (
  163.       set js=^(!he!^)!b:~0,1!^(!b:~1!^)
  164.       set js=!js:f=-!
  165.       call :start !js! he
  166.     ) else set "he=%%a"
  167. )
  168. set "%~2=!he:-=f!"
  169. goto :EOF
  170. :lis1 将*号替换为c 方便代码运行
  171. for /f "tokens=1* delims=*" %%a in ("%~1") do (
  172.    set "ok=!ok!c%%a"
  173.    call :lis1 "%%b" ok
  174.    if "%%b"=="" goto :EOF
  175. )
  176. set "%~2=%ok%"
  177. goto :eof
  178. :cif  处理次方
  179. set aaa=&set bbb=&set aa=&set bb=&set n=0
  180. for /f "tokens=1* delims=x" %%a in ("%~1") do (
  181.    if "%%b"=="" set %~2=!ok!&goto :EOF
  182.    set a=%%a&set "b=%%b"
  183.    set a=!a:^(=^( !&set a=!a:+=+ !&set a=!a:-=- !
  184.    set a=!a:c=c !&set a=!a:/=/ !
  185.    for %%i in (!a!) do set aaa=!aaa!!aa!&set aa=%%i
  186.    set b=!b:^)= ^)!&set b=!b:+= +!&set b=!b:-= -!
  187.    set b=!b:c= c!&set b=!b:/= /!
  188.    for %%i in (!b!) do set /a n+=1&set l!n!=%%i
  189.    set bb=!l1!&set "ok="
  190.    for /l %%i in (2 1 !n!) do set bbb=!bbb!!l%%i!
  191.    for /l %%i in (1 1 !bb!) do set ok=!ok!c!aa!
  192.    set "ok=!ok:~1!"
  193.    if "!bb!"=="0" set "ok=1c1"
  194.    if "!bb!"=="1" set "ok=!aa!c1"
  195.    call :liscc "!ok!" ok
  196.    set ok=!aaa!!ok!!bbb!
  197.    call :cif "!ok!" ok
  198. )
  199. set %~2=!ok!
  200. goto :EOF
  201. :start
  202. setlocal
  203. set "suru=%~1"
  204. set yunsuanf=&set f=&set "ff="&set xs1=&set "xs2="
  205. set "suru=%suru: =%"
  206. if "%suru:~-1%"=="=" set "suru=%suru:~0,-1%"
  207. if "%suru:~0,1%"=="(" set suru=%suru:~1%&set "xs1=("
  208. if "%suru:~0,1%"=="-" (set yf=-) else set "yf="
  209. for /f "tokens=1* delims=+-*/" %%a in ("%suru%") do (
  210.    set num=%yf%%%a&set "str=%%b"
  211.    (set str=!str:^(=!&set str=!str:^)=!)
  212. )
  213. (set num=!num:^)=!)
  214. set "ysf=!suru:*%num%=!"
  215. if "%ysf:~0,1%"==")" set "ysf=%ysf:~1%"
  216. set "ysf=!ysf:~0,1!"
  217. if not defined xs1 (set "xs1=!num!")else set "xs1=!xs1!!num!)"
  218. set "xsysf=%ysf%"
  219. if "!str:~0,1!"=="-" (set "xs2=(!str!)")else set "xs2=!str!"
  220. set "xsss=!xs1! !xsysf! !xs2!"
  221. if "!num:~0,1!"=="-" (
  222.   if "!str:~0,1!"=="-" (set ff=) else set "ff=-"
  223. ) else if "!str:~0,1!"=="-" set "ff=-"
  224. if "!ysf!"=="+" (
  225.    set "yunsuanf=jia"&set "ff="
  226.    if "!num:~0,1!"=="-" (
  227.       set "ff=-"
  228.       if not "!str:~0,1!"=="-" set "yunsuanf=jian"
  229.     ) else if "!str:~0,1!"=="-" set "yunsuanf=jian"
  230. )
  231. if "!ysf!"=="-" (
  232.    set "yunsuanf=jian"&set "ff="
  233.     if "!num:~0,1!"=="-" (
  234.       set "ff=-"&set "yunsuanf=jia"
  235.       if "!str:~0,1!"=="-" set "yunsuanf=jian"
  236.     ) else (if "!str:~0,1!"=="-" set yunsuanf=jia)
  237. )
  238. if "!ysf!"=="*" set "yunsuanf=cen"
  239. if "!ysf!"=="/" (set "yunsuanf=cu0")
  240. set num=!num:-=!&set "str=!str:-=!"
  241. set /a numxw=0,strxw=0,xzw=0,xc=0,duo=0
  242. call :pdxs %num% numz numx numxw
  243. call :pdxs %str% strz strx strxw
  244. if %numxw% geq %strxw% (set /a duo=numxw) else set /a duo=strxw
  245. set /a xzw=numxw+strxw,xc=numxw-strxw&set "xc=!xc:-=!"
  246. if !duo! neq 0 (
  247.    set "numx=!numx:~0,%duo%!"&set "strx=!strx:~0,%duo%!"
  248. ) else set "numx="&set "strx="
  249. ::echo 第一个数 整数 %numz%   小数 %numx%   小数的位数 %numxw% 位
  250. ::echo 第一个数 整数 %strz%   小数 %strx%   小数的位数 %strxw% 位
  251. set "she=%numz%%numx% %strz%%strx%"
  252. if "!ysf!"=="*" set /a duo=xzw&set "she=%num:.=% %str:.=%"
  253. call :%yunsuanf% %she% ok
  254. if "!ysf!"=="/" goto ok
  255. goto xs
  256. :pdxs 给小数补0、获取小数位数。
  257. setlocal&set /a z=0
  258. set "var=%~1"
  259. if "!var:~0,1!"=="." set "var=0!var!"
  260. for /f "tokens=1* delims=." %%a in ("!var!")do (set "str1=%%a"
  261.    if "%%b"=="" (set str2=!lin!&set z=0) else (
  262.      set "str2=%%b"
  263.      for /l %%i in (0 1 9) do set "str2=!str2:%%i= %%i !"
  264.      for %%i in (!str2!) do set /a z+=1
  265.      set "str2=!str2: =!"&set "str2=%%b!lin!"
  266. ))
  267. Endlocal&set %~2=%str1%&set %~3=%str2%&set "%~4=%z%"&goto :EOF
  268. :xs 处理最终结果
  269. if "%ok:-=%"=="0" goto ok
  270. set "ok=!ff!!ok!"&set "lin="
  271. if "!ok:~0,1!"=="-" (
  272.    if "!ok:~1,1!"=="-" (set "f=") else set "f=-"
  273. ) else set "f="
  274. set "ok=!ok:-=!"
  275. if !duo! equ 0 (goto ok) else (
  276.    set "ok=!lin!!ok!"
  277.    set "ok=!ok:~0,-%duo%!.!ok:~-%duo%,%duo%!"
  278. )
  279. :loop
  280. if "!ok:~-1!"=="0" set ok=!ok:~0,-1!&goto loop
  281. for /f "tokens=* delims=0" %%a in ("%ok%") do (
  282.    if "%%a"=="" (set ok=0&goto ok) else set "ok=%%a"
  283. )
  284. if "!ok!"=="." set ok=0&goto ok
  285. if "!ok:~0,1!"=="." set "ok=0!ok!"
  286. if "!ok:~-1!"=="." set "ok=!ok:~0,-1!"
  287. :ok
  288. endlocal&set %~2=%f%%ok%&goto :EOF
  289. :jia 加法函数(封装)by @随风 @bbs.bathome.cn
  290. ::计算任意位数的正整数加法
  291. setlocal enabledelayedexpansion&set f=&set "t="
  292. set var1=%~1&set var2=%~2&set /a j=0,n1=0,n2=0
  293. for /l %%a in (0 1 9) do (set vard1=&set "vard2="
  294. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  295. for %%a in (!var1!)do (set/a n1+=1&set vard1=%%a !vard1!)
  296. for %%a in (!var2!)do (set/a n2+=1&set vard2=%%a !vard2!)
  297. (if !n1! lss !n2! (set var1=%var2%&set "var2=%var1%"
  298. set vard1=%vard2%&set vard2=%vard1%))&set "var2=!var2: =!"
  299. for %%a in (!vard1!) do (if "!var2!"=="" set /a var2=0
  300. set /a a=%%a+!var2:~-1!+j&set t=!a:~-1!!t!&set "a=0!a!"
  301. set "j=!a:~-2,1!"&set var2=!var2:~0,-1!)
  302. if !j! neq 0 set "t=!j!!t!"
  303. Endlocal&set %~3=%t%&goto :EOF
  304. :jian 减法函数(封装)by @随风 @bbs.bathome.cn
  305. ::计算1000位以内的正整数减法
  306. setlocal enabledelayedexpansion&set f=&set "lin=00000"
  307. for /l %%a in (1 1 5) do set "lin=!lin!!lin!!lin!"
  308. set var1=!lin!%~1&set var2=!lin!%~2&set vard1=&set/a j=0
  309. set t=&set var1=!var1:~-1000!&set "var2=!var2:~-1000!"
  310. if "!var1!" lss "!var2!" (set var1=%~2&set "var2=%~1"
  311. set "f=-") else set var1=%~1&set "var2=%~2"
  312. for /l %%a in (0 1 9) do set "var1=!var1:%%a= %%a !"
  313. for %%a in (!var1!) do set "vard1=%%a !vard1!"
  314. for %%a in (!vard1!) do (if "!var2!"=="" set/a var2=0
  315. set /a a=%%a-j,b=!var2:~-1!
  316. if !a! lss !b! (set /a a+=10,j=1)else set /a j=0
  317. set /a w=a-b&set t=!w!!t!&set var2=!var2:~0,-1!)
  318. for /f "tokens=* delims=0" %%a in ("!t!") do (
  319. if "%%a"=="" (set t=0) else set "t=%%a")
  320. Endlocal&set %~3=%f%%t%&goto :EOF
  321. :cen 乘法函数(封装)by @随风 @bbs.bathome.cn
  322. ::计算任意位数的正整数乘法
  323. setlocal enabledelayedexpansion
  324. if "%~1"=="0" Endlocal&set %~3=0&goto :EOF
  325. if "%~2"=="0" Endlocal&set %~3=0&goto :EOF
  326. set f=&set jia=&set ji=&set /a n1=0,n2=0
  327. set vard1=&set "vard2="&set var1=%~1&set "var2=%~2"
  328. for /l %%a in (0 1 9) do (
  329. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  330. for %%a in (!var1!)do (set /a n1+=1&set vard1=%%a !vard1!)
  331. for %%a in (!var2!)do (set /a n2+=1&set vard2=%%a !vard2!)
  332. if !n1! gtr !n2! (set vard1=%vard2%&set vard2=%vard1%)
  333. for %%a in (!vard1!) do (set "t="&set /a j=0
  334. for %%b in (!vard2!) do (if "!jia!"=="" set /a jia=0
  335. set /a a=%%a*%%b+j+!jia:~-1!&set "t=!a:~-1!!t!"
  336. set a=0!a!&set "j=!a:~-2,1!"&set jia=!jia:~0,-1!)
  337. set "ji=!t:~-1!!ji!"
  338. if "!j:~0,1!"=="0" (set ss=) else set "ss=!j:~0,1!"
  339. set jia=!ss!!t:~0,-1!)
  340. if not "!j:~0,1!"=="0" set "t=!j:~0,1!!t!"
  341. set "ji=!t!!ji:~1!"
  342. Endlocal&set %~3=%ji%&goto :EOF
  343. :cu0 500位内整数除法函数(封装)by @随风 bbs.bathome.cn
  344. ::函数内有 cu1 cu2 cu3 cu4 四个标签,引用时需注意
  345. setlocal enabledelayedexpansion&set "lin=00000"
  346. for /l %%a in (1 1 5) do set "lin=!lin!!lin!!lin!"
  347. set /a zongw=1000,cs1w=0,cs2w=0,falg=0,x=0
  348. if "!str!"=="1" Endlocal&set %~3=%ff%!num!&goto :EOF
  349. if "%~1"=="0" set sang=0&goto cu4
  350. if "!str!"=="0" set sang=以零为除数的错误。&goto cu4
  351. if not defined xiaosu set /a xiaosu=10
  352. set sang=&set ppp=&set var1=%~1&set "var2=%~2"
  353. for /f "tokens=* delims=0" %%a in ("!var1!")do set var1=%%a
  354. for /f "tokens=* delims=0" %%a in ("!var2!")do set var2=%%a
  355. for /l %%a in (0 1 9)do (set "var1=!var1:%%a= %%a !"
  356. set "var2=!var2:%%a= %%a !")
  357. for %%a in (!var1!) do set /a cs1w+=1
  358. for %%a in (!var2!) do set /a cs2w+=1
  359. for /l %%a in (1 1 10) do (set t=&set cs=%~2&set/a j=0
  360. for /l %%b in (1 1 !cs2w!) do (set /a a=%%a*!cs:~-1!+j
  361. set t=!a:~-1!!t!&set a=0!a!&set "j=!a:~-2,1!"
  362. set cs=!cs:~0,-1!&set cs%%a=&set "bj%%a=")
  363. if !j! neq 0 (set cs%%a=!lin!!j!!t!&set "bj%%a=!j!!t!"
  364. ) else set cs%%a=!lin!!t!&set "bj%%a=!t!"
  365. set "cs%%a=!cs%%a:~-%zongw%!")
  366. set var2=!lin!!var2: =!&set "var2=!var2:~-%zongw%!"
  367. set /a cswc=cs1w-cs2w&set "var1=!var1: =!"
  368. if !cswc! lss 0 (set cswc=!cswc:-=!&set/a flag=1
  369. for /l %%a in (1 1 !cswc!)do (
  370. if %%a leq 11 set sang=0!sang!&set /a x=cswc-1
  371. set "var1=!var1!0")
  372. set "sang=!sang:~0,1!.!sang:~1!")
  373. set ppp=!var1:~0,%cs2w%!&set "var1=!var1:~%cs2w%!"
  374. if !flag! equ 1 (set /a bul=1) else set /a bul=0
  375. goto cu2
  376. :cu1
  377. if not defined var1 (set "var1=0"
  378. if not defined ppp goto cu4
  379. if !flag! equ 0 (set sang=!sang!.&set /a flag=1))
  380. set/a bul=1&set ppp=!ppp!!var1:~0,1!&set "var1=!var1:~1!"
  381. :cu2
  382. if !x! geq %xiaosu% goto cu4
  383. set pvar1=!lin!!ppp!&set "pvar1=!pvar1:~-%zongw%!"
  384. if "!pvar1!" lss "!var2!" (
  385. if !bul! equ 1 (set sang=!sang!0&set /a bul=0
  386. if !flag! equ 1 set /a x+=1)
  387. if "!ppp:~0,1!"=="0" set "ppp="
  388. goto cu1)
  389. if !flag! equ 1 set /a x+=1
  390. set /a bul=0
  391. ::计算商
  392. for /l %%a in (1 1 10) do (
  393. if "!cs%%a!" equ "!pvar1!" (
  394. set "sang=!sang!%%a"&set "yu=!bj%%a!"&goto cu3)
  395. if "!cs%%a!" gtr "!pvar1!" (set /a s=%%a-1
  396. set "sang=!sang!!s!"&set yu=!t!&goto cu3)
  397. set "t=!bj%%a!")
  398. :cu3 计算差
  399. set cjs=!ppp!&set cj1=&set m=&set/a jjj=0
  400. for /l %%a in (0 1 9) do set "cjs=!cjs:%%a= %%a !"
  401. for %%a in (!cjs!) do set "cj1=%%a !cj1!"
  402. for %%a in (!cj1!) do (if "!yu!"=="" set/a yu=0
  403. set /a a=%%a-jjj,b=!yu:~-1!
  404. if !a! lss !b! (set /a a+=10,jjj=1)else set/a jjj=0
  405. set /a w=a-b&set m=!w!!m!&set yu=!yu:~0,-1!)
  406. for /f "tokens=* delims=0" %%m in ("!m!") do (
  407. if "%%m"=="" (set m=0) else set "m=%%m")
  408. if !m! equ 0 (
  409. if "!var1:0=!"=="" set sang=!sang!!var1!&goto cu4
  410. set ppp=&goto cu1) else set "ppp=!m!"
  411. goto cu2
  412. :cu4
  413. if "!sang:~0,1!"=="." set "sang=0!sang!"
  414. Endlocal&set %~3=%ff%%sang%&goto :EOF
  415. :ydsuom  阅读使用说明
  416. color df&set "flag3="
  417. for /f "usebackq delims=" %%a in ("%~1")do (
  418.    if "%%a"=="智能批处理计算器使用说明:" set flag3=a
  419.    if defined flag3 echo.&echo  %%a
  420. )
  421. echo.&echo.    ===============================================================
  422. set xiansixs=  除法默认保留 %xiaosu% 位小数,
  423. echo.&echo.  !xiansixs!可自行修改代码第一行的 set /a xiaosu=%xiaosu%
  424. echo.
  425. echo.&echo.    注意:代码未对输入格式作正确与否判断,
  426. echo.          所以输入必须正确,否则答案可能有误 ......
  427. set flag3=&goto :EOF
  428. 智能批处理计算器使用说明:
  429. 1、可对1000位以内 整数、小数、负数进行 加减乘除 计算(除法 500 位)
  430.    1000位 指需计算的数的位数不能超过1000位,包扩小数点及小数的位数
  431. 2、可对连续的算式进行计算如:1+2-3*4/5
  432. 3、支持括弧号如:7+[5*(-2+3)+(1+-2)-2+8]
  433.    运算符为  + - * / ( ) [ ] { }
  434.    计算次序为 先括弧内、后括弧外、先乘除、再加减
  435.    括弧次序依次为:小括弧() 中括弧[] 大括弧{}
  436. 4、输入格式:
  437.    负数的输入如:负8减负5 -8--5 或 负8加负5 -8+-5
  438.    小数的输入如:0.5 直接输入 .5 也可以,但返回信息会自动补上0
  439.    括弧外测的乘号可省略如:2*(5+3)可简写成 2(5+3) 或 (5+3)2
  440.    算式后面的 = 号 可有可无 如:1+2+3= 或 1+2+3 都可以
  441. 5、可对文本内的算式进行批量计算,文本内必须一行一个算式
  442. 6、手动输入算式:
  443.    若在算式末尾加上运算符 可把该次计算结果累计到 存储结果中 如:2+6+
  444.    加上 . 将储存结果中的值更改为该次计算结果 如:输入:2+6.
  445.    举例:输入 2+6 / 表示用该次计算结果 即:8 除以储存结果中的值
  446.    小技巧:输入数字加点 定义储存结果的初始值
  447.            输入数字加运算符 对储存结果的值进行计算
  448. 7、圆周率:3.1415926535897932384626433832795
  449.    圆周率默认31位小数 用 pi 表示
  450.    如:输入:3*pi 等同 3*3.1415926535897932384626433832795
  451. 8、次方的计算及输入:
  452.    如:计算 16的3次方 可输入 16x3  如:8的5次方 输入:8x5
  453.    也可在算式中直接输入次方如:2+(2*16x2)+8x5
复制代码

作者: logictianjin    时间: 2011-2-20 18:56

试用中 代码看我都傻了 看不懂哦!!!
感谢!!!!
作者: Batcher    时间: 2011-2-21 17:38     标题: 回复 2楼 的帖子

域名需要更新^_^




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2