1、批处理计算器复制时要把代码最下方的“智能批处理计算器使用说明”一起复制到代码中。否则会影响代码运行。echo off&set jiluk=&set /a jilu=0,xsljjg=0,xiaosu=10title %n0 智能计算器2 by 随风 2009-02-22set sangcijg=&set pi=3.1415926535897932384626433832795setlocal enabledelayedexpansion&set lin=00000for /l %a in (1 1 5) do set lin=!lin!lin!lin!:kaisiset yyd=&color
2、cfecho.&echo. 欢迎使用 智能批处理计算器echo.&echo.&echo. 首次使用请先仔细阅读使用说明echo.&echo. 本代码源自 批处理之家论坛 echo.&echo. 使用中若发现 bug 请去该处反馈、谢谢 !echo.&echo.&echo.&echo. 重要声明:echo.&echo. 本代码为 bat 批处理业余爱好者编写echo.&echo. 可任意转载、使用、但若因此导致的任何错误、损失、本人概不负责。echo.&echo.&echo.echo. 请选择: 1 阅读使用说明 2 进入对文本操作界面 3 进入手动界面:kaisi2echo.&set xuan
3、ze=&set /p xuanze= &clsif %xuanze%=3 color 1f&goto start0if not defined xuanze color 1f&goto start0if defined yyd if !xuanze!=1 cls&goto kaisiif %xuanze%=1 ( call :ydsuom %0 set yyd=a&echo.&echo. echo. 请选择:1 返回首页 2 进入对文本操作界面 3 进入手动界面 goto kaisi2)if not %xuanze%=2 cls&goto kaisi:wbjm 文本界面cls&color 1f
4、echo.&echo. 直接回车返回首页。echo.&echo. 按 3 进入手动输入算式界面。echo.&echo. 请输入文件名全名及全路径,或拖放文件来此。echo.&set wenben=&set /p wenben= &cls&set baocun=temp.txtif !wenben!=3 cls&goto start0if not defined wenben cls&goto kaisiset wenben=%wenben:=%if not exist %wenben% echo 文件不存在。&ping/n 3 127.0nul&goto wbjmecho.&echo. 正在计
5、算 %wenben:=% 中的算式,结果保存在 %baocun% 中echo.&echo. 请稍候 。&echo.setlocal&cd.%baocun%for /f usebackq delims= %a in (%wenben%) do ( call :start0 %a okk %baocun% echo !okk!)start %baocun%exit:start0setlocalif !wenben!=3 set wenben=if defined wenben set suru=%1&goto wenbenecho.&echo. 累计储存结果:%xsljjg%echo.&echo.
6、 %sangcijg%echo.&echo.&echo.&echo. 输入 bz 查看帮助echo.&echo. 请输入算式 如:-7+2+1+(3+-2*0.5-2*2+3)+3*(9-8*2)*5/2-2+5=echo.&set suru=&set /p suru= &clsif !suru!=bz ( call :ydsuom %0 echo.&echo. 按任意键返回 。&pausenul&cls&color 1f endlocal&set xsljjg=%jilu%&goto start0)if not defined suru endlocal&cls&set xsljjg=%ji
7、lu%&goto start0set suru=%suru: =%if !suru:-1!=+ set jiluk=a&set bq=+if !suru:-1!=- set jiluk=a&set bq=-if !suru:-1!=* set jiluk=a&set bq=*if !suru:-1!=/ set jiluk=a&set bq=/if !suru:-1!=. set jiluk=a&set jilu=0&set bq=+if defined jiluk set suru=!suru:0,-1!:wenbenset suru=%suru: =%if !suru:0,1!=. set
8、 suru=0!suru!for %a in (c + - / ( ) do set suru=!suru:%a.=%a0.!if %suru:-1%= set suru=%suru:0,-1%echo.&echo.正在计算: %suru% =set xsjg=%suru% =:从这里开始set ok=if %suru:0,1%=- set suru=f%suru:1%call :lis1 %suru% okset ok=!Ok:1!for %a in (c + - / ( ) do set ok=!ok:%a-=%af!for /l %a in (0 1 9) do ( set ok=!ok
9、:%a(=%ac(! set ok=!ok:)%a=)c%a! set ok=!ok:%a=%ac! set ok=!ok:%a=c%a! set ok=!ok:%a=%ac! set ok=!ok:%a=c%a!)set ok=!ok:pi=%pi%!set ok=0+!ok!+0call :cif !ok! okfor %g in () ) do ( set kuoh=%g call :lisxh !ok! ok)call :liscc !ok! okcall :lisjj !ok! okset ok=!ok:f=-!:完成计算set lecs=&set cucw=if defined j
10、iluk ( set okok=!ok! set leiji=!okok! !bq! !jilu! if !bq!=/ if !jilu!=0 ( set bq=*&set /a okok=1 set leiji=0 + !jilu! set lecs=以零为除数的错误。累计储存结果不变。 ) if !ok!=以零为除数的错误。 ( set lecs=以零为除数的错误。累计储存结果不变。 set leiji=0 + !jilu! set bq=+&set /a okok=0 ) call :start (!okok!)!bq!(!jilu!) jilu)if defined wenben en
11、dlocal&set %2=%xsjg% %ok%&goto :EOFcls&set xsljjg=!jilu! !lecs!set sangcijg=!xsjg! !ok! !cucw!if defined jiluk ( endlocal&set jilu=%jilu%&set xsljjg=%xsljjg%&set sangcijg=%sangcijg%) else endlocal&set sangcijg=%sangcijg%goto start0goto :EOF:lisxh 处理各种()括弧for /f tokens=1,2* delims=%kuoh% %a in (%1) d
12、o ( if %b= set %2=!ok!&goto :EOF call :liscc %b ok call :lisjj !ok! ok set ok=!ok:-=f! set ok=%a!ok!%c call :lisxh !ok! ok)goto :EOF:liscc 计算连续乘除set ph=%1&set q=&set h=&set aa=&set n=0set ph=!ph:c= c# !&set ph=!ph:/= / !set ph=!ph:+= + !&set ph=!ph:-= - !for /f tokens=1* delims=c/ %a in (!ph!) do (
13、if %b= set %2=!ph: =!&goto :EOF for %i in (%a) do set q=!q!aa!&set aa=%i for %i in (%b) do set /a n+=1&set m!n!=%i for /l %i in (3 1 !n!) do set h=!h!m%i! if !m1!=# (set m1=*) else set m1=/ set js=(!aa:f=-!)!m1!(!m2:f=-!) if not !h!= set h=!h:c#=c!&set h=!h:/=/! call :start !js! ph if !ph!=以零为除数的错误。
14、 set q=&set h= set ph=!ph:-=f! set ph=!q!ph:-=f!h! set ph=!ph:/=/! call :liscc !ph! ph)set %2=!ph: =!goto :EOF:lisjj 计算连续加减set he=&set js=%1set js=!js:+= +!&set js=!js:-= -!for %a in (!js!) do ( set b=%a if defined he ( set js=(!he!)!b:0,1!(!b:1!) set js=!js:f=-! call :start !js! he ) else set he=%a
15、 )set %2=!he:-=f!goto :EOF:lis1 将*号替换为c 方便代码运行for /f tokens=1* delims=* %a in (%1) do ( set ok=!ok!c%a call :lis1 %b ok if %b= goto :EOF)set %2=%ok%goto :eof:cif 处理次方set aaa=&set bbb=&set aa=&set bb=&set n=0for /f tokens=1* delims=x %a in (%1) do ( if %b= set %2=!ok!&goto :EOF set a=%a&set b=%b set
16、a=!a:(=( !&set a=!a:+=+ !&set a=!a:-=- ! set a=!a:c=c !&set a=!a:/=/ ! for %i in (!a!) do set aaa=!aaa!aa!&set aa=%i set b=!b:)= )!&set b=!b:+= +!&set b=!b:-= -! set b=!b:c= c!&set b=!b:/= /! for %i in (!b!) do set /a n+=1&set l!n!=%i set bb=!l1!&set ok= for /l %i in (2 1 !n!) do set bbb=!bbb!l%i! f
17、or /l %i in (1 1 !bb!) do set ok=!ok!c!aa! set ok=!ok:1! if !bb!=0 set ok=1c1 if !bb!=1 set ok=!aa!c1 call :liscc !ok! ok set ok=!aaa!ok!bbb! call :cif !ok! ok)set %2=!ok!goto :EOF:start 计算单一算式setlocalset suru=%1set yunsuanf=&set f=&set ff=&set xs1=&set xs2=set suru=%suru: =%if %suru:-1%= set suru=%
18、suru:0,-1%if %suru:0,1%=( set suru=%suru:1%&set xs1=(if %suru:0,1%=- (set yf=-) else set yf=for /f tokens=1* delims=+-*/ %a in (%suru%) do ( set num=%yf%a&set str=%b (set str=!str:(=!&set str=!str:)=!)(set num=!num:)=!)set ysf=!suru:*%num%=!if %ysf:0,1%=) set ysf=%ysf:1%set ysf=!ysf:0,1!if not defin
19、ed xs1 (set xs1=!num!)else set xs1=!xs1!num!)set xsysf=%ysf%if !str:0,1!=- (set xs2=(!str!)else set xs2=!str!set xsss=!xs1! !xsysf! !xs2!if !num:0,1!=- ( if !str:0,1!=- (set ff=) else set ff=-) else if !str:0,1!=- set ff=-if !ysf!=+ ( set yunsuanf=jia&set ff= if !num:0,1!=- ( set ff=- if not !str:0,
20、1!=- set yunsuanf=jian ) else if !str:0,1!=- set yunsuanf=jian)if !ysf!=- ( set yunsuanf=jian&set ff= if !num:0,1!=- ( set ff=-&set yunsuanf=jia if !str:0,1!=- set yunsuanf=jian ) else (if !str:0,1!=- set yunsuanf=jia)if !ysf!=* set yunsuanf=cenif !ysf!=/ (set yunsuanf=cu0)set num=!num:-=!&set str=!
21、str:-=!set /a numxw=0,strxw=0,xzw=0,xc=0,duo=0call :pdxs %num% numz numx numxwcall :pdxs %str% strz strx strxwif %numxw% geq %strxw% (set /a duo=numxw) else set /a duo=strxwset /a xzw=numxw+strxw,xc=numxw-strxw&set xc=!xc:-=!if !duo! neq 0 ( set numx=!numx:0,%duo%!&set strx=!strx:0,%duo%!) else set
22、numx=&set strx=:echo 第一个数 整数 %numz% 小数 %numx% 小数的位数 %numxw% 位:echo 第一个数 整数 %strz% 小数 %strx% 小数的位数 %strxw% 位set she=%numz%numx% %strz%strx%if !ysf!=* set /a duo=xzw&set she=%num:.=% %str:.=%call :%yunsuanf% %she% okif !ysf!=/ goto okgoto xs:pdxs 给小数补0、获取小数位数。setlocal&set /a z=0set var=%1if !var:0,1!=
23、. set var=0!var!for /f tokens=1* delims=. %a in (!var!)do (set str1=%a if %b= (set str2=!lin!&set z=0) else ( set str2=%b for /l %i in (0 1 9) do set str2=!str2:%i= %i ! for %i in (!str2!) do set /a z+=1 set str2=!str2: =!&set str2=%b!lin!)Endlocal&set %2=%str1%&set %3=%str2%&set %4=%z%&goto :EOF:xs
24、 处理最终结果if %ok:-=%=0 goto okset ok=!ff!ok!&set lin=if !ok:0,1!=- ( if !ok:1,1!=- (set f=) else set f=-) else set f=set ok=!ok:-=!if !duo! equ 0 (goto ok) else ( set ok=!lin!ok! set ok=!ok:0,-%duo%!.!ok:-%duo%,%duo%!):loopif !ok:-1!=0 set ok=!ok:0,-1!&goto loopfor /f tokens=* delims=0 %a in (%ok%) do
25、( if %a= (set ok=0&goto ok) else set ok=%a)if !ok!=. set ok=0&goto okif !ok:0,1!=. set ok=0!ok!if !ok:-1!=. set ok=!ok:0,-1!:okendlocal&set %2=%f%ok%&goto :EOF:jia 加法函数(封装)by 随风 :计算任意位数的正整数加法setlocal enabledelayedexpansion&set f=&set t=set var1=%1&set var2=%2&set /a j=0,n1=0,n2=0for /l %a in (0 1 9)
26、 do (set vard1=&set vard2=set var1=!var1:%a= %a !&set var2=!var2:%a= %a !)for %a in (!var1!)do (set/a n1+=1&set vard1=%a !vard1!)for %a in (!var2!)do (set/a n2+=1&set vard2=%a !vard2!)(if !n1! lss !n2! (set var1=%var2%&set var2=%var1%set vard1=%vard2%&set vard2=%vard1%)&set var2=!var2: =!for %a in (
27、!vard1!) do (if !var2!= set /a var2=0set /a a=%a+!var2:-1!+j&set t=!a:-1!t!&set a=0!a!set j=!a:-2,1!&set var2=!var2:0,-1!)if !j! neq 0 set t=!j!t!Endlocal&set %3=%t%&goto :EOF:jian 减法函数(封装)by 随风 :计算1000位以内的正整数减法setlocal enabledelayedexpansion&set f=&set lin=00000for /l %a in (1 1 5) do set lin=!lin!lin!lin!set var1=!lin!%1&set var2=!lin!%2&set vard1=&set/a j=0set t=&set var1=!var1:-1000!&set var2=!var2:-1000!if !var1! lss !var2! (set var1=%2&set var2=%1set f=-) else set var1=%1&set var2=%2for /l %a in (0 1 9) do set var1=!var1:%a= %a !for %a in (!var1!) do set vard1=%a !
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1