我觉得用到什么了找别人的来修改来使用,直接用?怕不怎么好使
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
Originally posted by vkill at 2008-4-25 01:29 PM:
我觉得用到什么了找别人的来修改来使用,直接用?怕不怎么好使
@echo off
::Code By cn-dos moniuming 2008-12-31
if "%1"=="" goto :hlp
setlocal enabledelayedexpansion
:bgn
for %%a in (dot ceng fuhao wei answer strax strbx) do (set %%a=)
set "stra=%1"&set "strb=%2"
if "%stra:~,1%"=="+" (set stra=%stra:~1%)
if "%strb:~,1%"=="+" (set strb=%strb:~1%)
if "%stra:~,1%"=="-" (set /a fuhao+=1&set stra=%stra:~1%)
if "%strb:~,1%"=="-" (set /a fuhao+=1&set strb=%strb:~1%)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
set "stral=%%a"&set "strar=%%b"
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
set "strbl=%%a"&set "strbr=%%b"
)
:agn1
if defined strar (
set "strax=%strax%%strar:~-1% "
set /a "dot+=1","wei+=1"
if not "%strar:~0,-1%"=="" (
set "strar=%strar:~0,-1%"&goto :agn1
)
)
:agn2
if defined strbr (
set "strbx=%strbx%%strbr:~-1% "
set /a "dot+=1","wei+=1"
if not "%strbr:~0,-1%"=="" (
set "strbr=%strbr:~0,-1%"&goto :agn2
)
)
:agn3
set "strax=%strax%%stral:~-1% "
set /a "wei+=1"
if not "%stral:~0,-1%"=="" (set "stral=%stral:~0,-1%"&goto :agn3)
:agn4
set "strbx=%strbx%%strbl:~-1% "
set /a "wei+=1"
if not "%strbl:~0,-1%"=="" (set "strbl=%strbl:~0,-1%"&goto :agn4)
for %%a in (%strax%) do (
set /a "ceng+=1"&set "lie=!ceng!"&set "jinwei=0"
for %%b in (%strbx%) do (
set /a "sth=%%a*%%b"
set "sthl=!sth:~0,-1!"
set "sthr=!sth:~-1!"
set /a "var=ans!lie!+!jinwei!+!sthr!"
set "jinwei=0"
set "varl=!var:~0,-1!"
set "varr=!var:~-1!"
if not "!sthl!"=="" (set /a "jinwei+=!sthl!")
if not "!varl!"=="" (set /a "jinwei+=!varl!")
set "ans!lie!=!varr!"
set /a "lie+=1"
)
set "ans!lie!=!jinwei!"
)
for /l %%a in (1 1 %wei%) do (
set "answer=!ans%%a!!answer!"
set "ans%%a="
)
if defined dot (
if not "%4"=="" (
if "%4"=="0" (
set "answer=!answer:~0,-%dot%!"
) else (
set "answer=!answer:~0,-%dot%!.!answer:~-%dot%,%4!"
)
) else (
set "answer=!answer:~0,-%dot%!.!answer:~-%dot%!"
)
)
:cut
if "%answer:~0,1%"=="0" (
if not "%answer:~1,1%"=="." (
set answer=%answer:~1%
goto :cut
)
)
if "%fuhao%"=="1" (set answer=-%answer%)
endlocal&set "%3=%answer%"&goto :eof
:hlp
color 3f
echo.&echo 使用方法:
echo.&echo 1.把本批处理脚本命名为 chengfa.bat 复制到系统目录里
echo.&echo 2.不带参数运行本批处理脚本显示此帮助信息
echo.&echo 3.格式: call chengfa.bat 参数1 参数2 参数3
echo.&echo 参数1 为乘数1
echo.&echo 参数2 为乘数2
echo.&echo 参数3 为变量名
echo.&echo 参数4 为保留小数位数,可选参数,如不选则保留所有小数.
echo.&echo 4.例: call chengfa.bat 100 123.456789 ans 2
echo.&echo 意思为给变量 ans 赋值,其值等于 100 和 123.456789 的乘积,
echo.&echo 并保留两位小数,结果为: 12345.67
echo.&set/p= 按任意键退出...<nul&pause>nul&color&goto :eof| 评分人 | 分数 | 时间 |
|---|---|---|
| plp626 | +15 | 2009-04-13 00:04 |
@echo off
::Code By cn-dos moniuming
if "%1"=="" goto :hlp
setlocal enableextensions
set "jinwei=0"
for %%a in (lastans bu dot) do (set %%a=)
set "stra=%1"
set "strb=%2"
if not "%4"=="" (
if "%4"=="0" (
set bu0=1
set dot=dot
) else (
set bu0=%4
)
) else (
set bu0=2
)
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
set stral=%%a
set "strar=%%b%bu%"
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
set strbl=%%a
set "strbr=%%b%bu%"
)
call set "jiashu1=%stral%%%strar:~0,%bu0%%%"
call set "jiashu2=%strbl%%%strbr:~0,%bu0%%%"
:agn
set /a "var=%jiashu1:~-1%+%jiashu2:~-1%+%jinwei%"
if %var% gtr 9 (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
set "jiashu1=%jiashu1:~0,-1%"
) else (
set "jiashu1="
)
if not "%jiashu2:~0,-1%"=="" (
set "jiashu2=%jiashu2:~0,-1%"
) else (
set "jiashu2="
)
if defined jiashu1 (
if defined jiashu2 (
goto :agn
) else (
call :count1
)
) else (
if defined jiashu2 (call :count2)
)
if "%jinwei%"=="0" (set "jinwei=")
call set "cn_ans=%jinwei%%%lastans:~0,-%bu0%%%.%%lastans:~-%bu0%%%"
if defined dot (set cn_ans=%cn_ans:~,-2%)
:cut0
if "%cn_ans:~,1%"=="0" (
if not "%cn_ans:~1%"=="" (
if not "%cn_ans:~1,1%"=="." (
set "cn_ans=%cn_ans:~1%"
goto :cut0
)
)
)
endlocal&set "%3=%cn_ans%"&goto :eof
:count1
set /a "var=%jiashu1:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
set "jiashu1=%jiashu1:~0,-1%"
goto :count1
) else (goto :eof)
:count2
set /a "var=%jiashu2:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu2:~0,-1%"=="" (
set "jiashu2=%jiashu2:~0,-1%"
goto :count2
) else (goto :eof)
:hlp
color 1f
echo.
echo 声明: 此脚本不支持负数的加法
echo 使用方法:
echo 把本批处理脚本复制到系统目录里
echo 不带参数运行本脚本 显示此帮助信息
echo.
echo 格式: call jiafa.bat 参数1 参数2 参数3
echo 参数1 为加数1
echo 参数2 为加数2
echo 参数3 为变量名
echo 可选参数,为保留小数的位数,如果空则默认保留2位小数
echo.
echo 例: call jiafa.bat 100.78965 123.45 ans 4
echo 意思为给变量 ans 赋值,其值等于100.78965与123.45的和,并保留四位小数
echo 结果为:224.2396
echo.&set/p= 按任意键退出...<nul
pause>nul&color&goto :eof@echo off
::Code By cn-dos moniuming 2009-02-08
if "%1"=="" goto :hlp
setlocal enableextensions
set /a jinwei=0,mm=0,mn=0
for %%a in (lastans bu baoliu dot tmp_) do (set %%a=)
set "stra=%1"
set "strb=%2"
if not "%4"=="" (
if "%4"=="0" (
set dot=dot
) else (
set baoliu=%4
)
)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
set stral=%%a
set strar=%%b
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
set strbl=%%a
set strbr=%%b
)
::如果不保留小数则跳过对小数部分的计算
if defined dot (
set jiashu1=%stral%
set jiashu2=%strbl%
goto :agn
)
::如果没有小数则跳过对小数部分的计算
if "%strar%"=="" (
if "%strbr%"=="" (
set dot=dot
set jiashu1=%stral%
set jiashu2=%strbl%
goto :agn
)
)
::计算加数1的小数位数
set "tmp_=%strar%"
:cnt1
if defined tmp_ (
set /a mm+=1
set tmp_=%tmp_:~1%
goto :cnt1
)
set "bu0=%mm%"
set "tmp_="
::计算加数2的小数位数
set "tmp_=%strbr%"
:cnt2
if defined tmp_ (
set /a mn+=1
set tmp_=%tmp_:~1%
goto :cnt2
)
if %mn% gtr %mm% (set bu0=%mn%)
::将两个加数的小数对齐
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
set strar=%strar%%bu%
set strbr=%strbr%%bu%
call set strar=%%strar:~,%bu0%%%
call set strbr=%%strbr:~,%bu0%%%
set "bu="
::如果定义小数位数,则取定义的位数
if defined baoliu (
for /l %%a in (1 1 %baoliu%) do (call set bu=%%bu%%0)
call set strar=%strar%%%bu%%
call set strbr=%strbr%%%bu%%
call set "jiashu1=%stral%%%strar:~,%baoliu%%%"
call set "jiashu2=%strbl%%%strbr:~,%baoliu%%%"
) else (
set jiashu1=%stral%%strar%
set jiashu2=%strbl%%strbr%
)
::计算
:agn
set /a "var=%jiashu1:~-1%+%jiashu2:~-1%+%jinwei%"
if %var% gtr 9 (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
set "jiashu1=%jiashu1:~0,-1%"
) else (
set "jiashu1="
)
if not "%jiashu2:~0,-1%"=="" (
set "jiashu2=%jiashu2:~0,-1%"
) else (
set "jiashu2="
)
if defined jiashu1 (
if defined jiashu2 (
goto :agn
) else (
call :count
)
) else (
if defined jiashu2 (
set jiashu1=%jiashu2%
call :count
)
)
::对小数点进行定位
if not defined dot (
if defined baoliu (
call set "cn_ans=%jinwei%%%lastans:~0,-%baoliu%%%.%%lastans:~-%baoliu%%%"
) else (
call set "cn_ans=%jinwei%%%lastans:~,-%bu0%%%.%%lastans:~-%bu0%%%"
)
) else (
set cn_ans=%jinwei%%lastans%
)
::对得数进行首位除0的处理
:cut0
if "%cn_ans:~,1%"=="0" (
if not "%cn_ans:~1%"=="" (
if not "%cn_ans:~1,1%"=="." (
set "cn_ans=%cn_ans:~1%"
goto :cut0
)
)
)
endlocal&set "%3=%cn_ans%"&goto :eof
::如果两个加数长度不一样,单独对长出来的部分进行计算
:count
set /a "var=%jiashu1:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
set "jiashu1=%jiashu1:~0,-1%"
goto :count
)
goto :eof
:hlp
color 1f
echo.
echo 声明: 此脚本不支持负数的加法
echo.
echo 使用方法:
echo 把本批处理脚本复制到系统目录里
echo 不带参数运行本脚本 显示此帮助信息
echo.
echo 格式: call jiafa.bat 参数1 参数2 参数3
echo 参数1 为加数1
echo 参数2 为加数2
echo 参数3 为变量名
echo 可选参数,为保留小数的位数,如果空则保留原有小数
echo.
echo 例: call jiafa.bat 100.78965 123.45 ans 4
echo 意思为给变量 ans 赋值,其值等于100.78965与123.45的和,并保留四位小数
echo 结果为:224.2396
echo.&set/p= 按任意键退出...<nul
pause>nul&color&goto :eof| 评分人 | 分数 | 时间 |
|---|---|---|
| plp626 | +15 | 2009-04-13 00:04 |
@echo off
rem Code By cn-dos moniuming 2009-02-09
if "%1"=="" goto :hlp
setlocal enableextensions
for %%a in (jie mm mn tm) do (set %%a=0)
for %%a in (baoliu fu last_ans m n no tmp_) do (set %%a=)
set beij=%1
set jian=%2
rem 把被减数首位除0
:cut1
if "%beij:~,1%"=="0" (
if not "%beij:~1%"=="" (
if not "%beij:~1,1%"=="." (
set beij=%beij:~1%
goto :cut1
)))
rem 把减数首位除0
:cut2
if "%jian:~,1%"=="0" (
if not "%jian:~1%"=="" (
if not "%jian:~1,1%"=="." (
set jian=%jian:~1%
goto :cut2
)))
rem 判断保留小数的位数
if not "%4"=="" (
if "%4"=="0" (
set no=no
) else (
set baoliu=%4
)
)
rem 把被减数和减数分为整数和小数两个部分
for /f "tokens=1,2 delims=." %%a in ("%beij%") do (
set "stral=%%a"&set "strar=%%b"
)
for /f "tokens=1,2 delims=." %%a in ("%jian%") do (
set "strbl=%%a"&set "strbr=%%b"
)
rem 如果不保留小数,则跳过对小数部分的计算
if defined no (
set stra=%stral%
set strb=%strbl%
goto :agn1
)
rem 如果没有小数,则跳过对小数部分的计算
if "%strar%"=="" (
if "%strbr%"=="" (
set no=no
set stra=%stral%
set strb=%strbl%
goto :agn1
)
)
rem 计算被减数小数部分的位数
set "tmp_=%strar%"
:cnt1
if defined tmp_ (
set /a mm+=1
set tmp_=%tmp_:~1%
goto :cnt1
)
set "bu0=%mm%"
rem 计算减数小数部分的位数
set "tmp_=%strbr%"
:cnt2
if defined tmp_ (
set /a mn+=1
set tmp_=%tmp_:~1%
goto :cnt2
)
if %mn% gtr %mm% set bu0=%mn%
rem 将两个减数的小数部分对齐
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
set strar=%strar%%bu%
set strbr=%strbr%%bu%
call set strar=%%strar:~,%bu0%%%
call set strbr=%%strbr:~,%bu0%%%
set "bu="
rem 如果定义小数位数,则取定义的位数
if defined baoliu (
for /l %%a in (1 1 %baoliu%) do (call set bu=%%bu%%0)
call set strar=%strar%%%bu%%
call set strbr=%strbr%%%bu%%
call set stra=%stral%%%strar:~,%baoliu%%%
call set strb=%strbl%%%strbr:~,%baoliu%%%
) else (
set stra=%stral%%strar%
set strb=%strbl%%strbr%
)
rem 计算被减数整数部分的位数
:agn1
set /a m+=1
if not "%stral:~1%"=="" (set stral=%stral:~1%&goto :agn1)
rem 计算减数整数部分的位数
:agn2
set /a n+=1
if not "%strbl:~1%"=="" (set strbl=%strbl:~1%&goto :agn2)
rem 判断正负
if %n% gtr %m% (
set fu=fu
set "beijshu=%strb%"
set "jianshu=%stra%"
) else (
if "%n%"=="%m%" (
set tmp1=%stra%
set tmp2=%strb%
goto :pk
) else (
set "beijshu=%stra%"
set "jianshu=%strb%"
)
)
rem 计算
:agn
set /a sth=%beijshu:~-1%-%jianshu:~-1%-%jie%
if %sth% lss 0 (
set jie=1
set /a sth+=10
) else (
set jie=0
)
set last_ans=%sth%%last_ans%
if not "%beijshu:~,-1%"=="" (
if not "%jianshu:~,-1%"=="" (
set "beijshu=%beijshu:~,-1%"&set "jianshu=%jianshu:~,-1%"&goto :agn
) else (
set "beijshu=%beijshu:~,-1%"&set "jianshu=0"&goto :agn
)
)
rem 不保留小数的除0以及正负数处理
:cut0
if defined no (
if not "%last_ans:~,1%"=="0" (
if not defined fu (
endlocal&set %3=%last_ans%&goto :eof
) else (
endlocal&set %3=-%last_ans%&goto :eof
)
) else (
set last_ans=%last_ans:~1%
goto :cut0
)
)
rem 对小数点进行定位
if defined baoliu (
call set last_ans=%%last_ans:~,-%baoliu%%%.%%last_ans:~-%baoliu%%%
) else (
if bu0 gtr 0 (
call set last_ans=%%last_ans:~,-%bu0%%%.%%last_ans:~-%bu0%%%
)
)
rem 首位除0处理
:cut_
if "%last_ans:~,1%"=="0" (
if not "%last_ans:~1,1%"=="." (
set last_ans=%last_ans:~1%
goto :cut_
)
)
rem 正负处理
if defined fu (
set last_ans=-%last_ans%
) else (
set last_ans=%last_ans%
)
rem 退出脚本
endlocal&set %3=%last_ans%&goto :eof
rem 判断相同位数的大小
:pk
if %tmp1:~,1% gtr %tmp2:~,1% (
set beijshu=%stra%
set jianshu=%strb%
goto :agn
) else (
if %tmp2:~,1% gtr %tmp1:~,1% (
set fu=fu
set beijshu=%strb%
set jianshu=%stra%
goto :agn
) else (
if not "%tmp1:~1%"=="" (
set tmp1=%tmp1:~1%
set tmp2=%tmp2:~1%
goto :pk
) else (
endlocal&set %3=0&goto :eof
)
)
)
:hlp
color 1f
echo.&echo 使用方法:
echo.&echo 1.把本批处理脚本命名为 jianfa.bat 复制到系统目录里
echo.&echo 2.不带参数运行本批处理脚本显示此帮助信息
echo.&echo 3.格式: call jianfa.bat 参数1 参数2 参数3
echo.&echo 参数1 为被减数
echo.&echo 参数2 为减数
echo.&echo 参数3 为变量名
echo.&echo 可选参数,为保留小数位数,如不选则保留原有小数.
echo.&echo 4.例: call jianfa.bat 100 123.456789 ans 2
echo.&echo 意思为给变量 ans 赋值,其值等于 100 减去 123.456789 的差,
echo.&echo 并保留两位小数,结果为: -23.45
echo.&set/p= 按任意键退出...<nul&pause>nul&color&goto :eof@echo off
goto :begin
f 100 l14 B8 00 B8 50 1F BF 00 02 B9 D0 07 BD 02 08 BA 50 00 AD 3C 20
f 114 l14 75 03 43 75 02 31 DB AA 4A 75 0D B8 0D 0A 29 DF 29 DD 31 DB
f 128 l0e AB BA 50 00 E2 E3 06 1F 89 E9 31 DB 90 90
t=100
g 134
w 200
q
:begin
if '%1'=='' set of=abcec.txt
debug %1%of%<%~f0>nul
start notepad %1%of%
goto :eof@echo off
set aa=%1
set bb=%2
::调用浮点加法函数
echo %time%
call :add cc aa bb
echo %time%
echo %cc%
goto :eof
:::::::::::::::::::::::::::::::
::浮点加法函数
:add <接收变量> <被加数变量> <加数变量>
::
::
::支持49位整数,49小数
::自动丢弃首尾无效0
::别看代码那么长,速度可不慢哦
:::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
set za=!%2:*.=!
set xa=!%2:.%za%=!
set zb=!%3:*.=!
set xb=!%3:.%zb%=!
if "!zb!."=="!%3!." set zb=0
if "!za!."=="!%2!." set za=0
set za=%za%0
set zb=%zb%0
set zm=0
for /l %%a in (0,9,81) do (
if "!za:~%%a,9!!zb:~%%a,9!"=="" goto :xok
set "za%%a=!za:~%%a,9!000000000"
set "zb%%a=!zb:~%%a,9!000000000"
set za%%a=1!za%%a:~0,9!
set zb%%a=1!zb%%a:~0,9!
set zm=%%a
)
:xok
set zy=0
for /l %%a in (%zm%,-9,0) do (
set/a "zz=!zy:~0,-9!+za%%a-1000000000+zb%%a-1000000000"
set zy=000000000!zz!
set zx=!zy:~-9!!zx!
)
set/a zm+=9,n=zm
for /l %%a in (1,1,%zm%) do if "!zx:~-%%a,1!"=="0" (set n=-%%a) else (goto :cok)
:cok
if "!zx:~-%zm%,%n%!" gtr "0" (set cc=.!zx:~-%zm%,%n%!) else (set cc=)
set zy=
for /l %%a in (9,9,81) do (
if "!xa!!xb!"=="" goto :end
set cc=!zy!!cc!
if defined xa (set "aa=000000000!xa:~-9!"&set xa=!xa:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
set/a zz=!zz:~0,-9!+1!bb:~-9!-1000000000+1!aa:~-9!-1000000000
set zy=000000000!zz!
set zy=!zy:~-9!
)
:end
set cc=%zz%%cc%
if "%cc%"=="0" goto :endok
if "%cc:~0,2%"=="0." goto :endok
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :endok)
:endok
endlocal&set cc=%cc%&goto :eof@echo off&setlocal enabledelayedexpansion
set a=%1
set b=%2
echo %time%
call :sub c a b
echo %time%
echo %c%
goto :eof
:::::::::::::::::::::::::::::::
::浮点减法函数
:sub <接收变量> <被减数变量> <减数变量>
::
::
::支持49位整数,49小数
::自动丢弃首尾无效0
::别看代码那么长,速度可不慢哦
:::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
set cc=0
set za=!%2:*.=!
set xa=!%2:.%za%=!
set zb=!%3:*.=!
set xb=!%3:.%zb%=!
if "!zb!."=="!%3!." set zb=0
if "!za!."=="!%2!." set za=0
set za=%za%0
set zb=%zb%0
::补0对齐
for /l %%a in (0,9,81) do (
if "!xa!!xb!"=="" set n=%%a&goto :bu0
if defined xa (set ya=!xa:~-9!!ya!&set xa=!xa:~0,-9!) else (set ya=000000000!ya!)
if defined xb (set yb=!xb:~-9!!yb!&set xb=!xb:~0,-9!) else (set yb=000000000!yb!)
)
:bu0
set ya=0000000000%ya%
set yb=0000000000%yb%
set xa=!ya:~-%n%!
set xb=!yb:~-%n%!
if "%xa%%za%" gtr "%xb%%zb%" (
set zz=!za!&set xx=!xa!&set fh=
) else (
set zz=!zb!&set xx=!xb!&set zb=!za!&set xb=!xa!&set fh=-
)
::预处理完成
for /l %%a in (0,9,81) do (
if "!zz:~%%a,9!!zb:~%%a,9!"=="" goto :xok
set "zz%%a=!zz:~%%a,9!000000000"
set "zb%%a=!zb:~%%a,9!000000000"
set zz%%a=1!zz%%a:~0,9!
set zb%%a=1!zb%%a:~0,9!
set zm=%%a
)
:xok
set jw=0
for /l %%a in (%zm%,-9,0) do (
set/a "zz=jw+zz%%a-zb%%a"
if !zz! lss 0 (set/a zz=1000000000+zz&set jw=-1) else (set jw=0)
set zy=000000000!zz!
set zx=!zy:~-9!!zx!
)
set/a zm+=9,n=zm
for /l %%a in (1,1,%zm%) do if "!zx:~-%%a,1!"=="0" (set n=-%%a) else (goto :cok)
:cok
if "!zx:~-%zm%,%n%!" gtr "0" (set cc=.!zx:~-%zm%,%n%!) else (set cc=)
set zy=
for /l %%a in (9,9,81) do (
if "!xx!!xb!"=="" goto :end
set cc=!zy!!cc!
if defined xx (set "aa=000000000!xx:~-9!"&set xx=!xx:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
set/a zz=jw+1!aa:~-9!-1!bb:~-9!
if !zz! lss 0 (set/a zz=1000000000+zz&set jw=-1) else (set jw=0)
set zy=000000000!zz!
set zy=!zy:~-9!
)
:end
set cc=%zz%%cc%
if "%cc%"=="0" goto :endok
if "%cc:~0,2%"=="0." goto :endok
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :endok)
:endok
endlocal&set %1=%fh%%cc%&goto :eof@echo off
set aa=%1
set bb=%2
::调用浮点乘法函数
echo %time%
call :mul cc aa bb %3
echo %time%
echo %cc%
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:mul <接收变量名> <被乘数> <乘数>
::
::浮点乘法函数,头尾都可带0,支持乘积为:49位整数,49位小数。
::第一个参数为接收变量名,第二、三个为相乘数变量名,第四个批定要保留小数位数
::最大位数计算仅需12毫秒
::别看代码那么长,速度可不慢
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
set cc=0
set ka=!%2:*.=!
set kb=!%3:*.=!
set maa=!%2:.=!
set mb=!%3:.=!
for /l %%a in (0,1,49) do if not "!maa:~%%a,1!"=="0" (set maa=!maa:~%%a!&goto :maaok)
:maaok
for /l %%a in (0,1,49) do if not "!mb:~%%a,1!"=="0" (set mb=!mb:~%%a!&goto :mbok)
:mbok
if "!kb!."=="!%3!." set kb=
if "!ka!."=="!%2!." set ka=
set kab=!kb!!ka!#
for /l %%a in (0,1,49) do if "!kab:~%%a,1!"=="#" (set kab=%%a&goto :lp1)
set mz=
:lp1
if defined mb (set al=!mb:~-4!
if "!al:~0,1!"=="0" set/a al=1!al!-10000
set mb=!mb:~0,-4!
) else (goto :endmul)
set ma=!maa!
set "cl= "
for /l %%a in (1,4,91) do (
if not defined ma (goto :end1)
set bl=!ma:~-4!
if "!bl:~0,1!"=="0" set/a bl=1!bl!-10000
set/a bl=!cl:~0,-%%a!+bl*al
set ma=!ma:~0,-4!
set cl=0000!cl:~-%%a!
set cl=!bl!!cl:~-%%a!
)
:end1
set cl=%cl:~0,-1%%mz%
set mz=!mz!0000
set xa=%cc%
set xb=%cl%
set cc=
set zz=0
set zy=
for /l %%a in (9,9,81) do (
if "!xa!!xb!"=="" goto :end2
set cc=!zy!!cc!
if defined xa (set "aa=000000000!xa:~-9!"&set xa=!xa:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
set/a zz=!zz:~0,-9!+1!bb:~-9!-1000000000+1!aa:~-9!-1000000000
set zy=000000000!zz!
set zy=!zy:~-9!
)
:end2
set cc=%zz%%cc%
if not %cc% gtr 0 goto :lp1
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :lp1)
goto :lp1
:endmul
if not %kab%==0 (
set ka=00000000000000000000000000000000000000000000000000%cc%
if "!cc:~0,-%kab%!"=="" (set cc=0.!ka:~-%kab%,%4!) else (set cc=!cc:~0,-%kab%!.!cc:~-%kab%,%4!)
)
endlocal&set %1=%cc%&goto :eof| 评分人 | 分数 | 时间 |
|---|---|---|
| plp626 | +15 | 2009-06-14 23:02 |