|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『楼 主』:
批处理计算小数
被除数与除数可支持输入小数,没有进行过多的排错处理,CMD所能处理的最大数值等问题,依旧存在,代码也比较臃肿,初步测试无出错。欢迎赐教!~
@echo off&setlocal enabledelayedexpansion
:1
cls&for %%a in (numeric1 numeric2 xxx n1 n2 #1 #2 a b z zero c mod d x mo ) do set "%%a="
echo.&echo.&echo.&set/p numeric1= 输入被除数: &echo.&set/p numeric2= 输入除数:
echo.&set/p xxx= 输入要保留的小数点位数:
for %%a in (1 2) do echo !numeric%%a!|find ".">nul&&set n%%a=!numeric%%a:*.=!
for %%i in (1 2) do (
if defined n%%i (
for /l %%a in (0 1 10) do (
if "!n%%i:~%%a,1!" neq "" set #%%i=%%a
)
)
)
for %%a in (1 2) do if defined #%%a (set/a #%%a+=1) else set #%%a=0
if !#1! geq !#2! (
set/a z=!#1!-!#2!,a=%numeric1:.=%,b=%numeric2:.=%
) else (
set/a z=!#2!-!#1!,a=%numeric2:.=%,b=%numeric1:.=%
)
for /l %%a in (1 1 %z%) do set zero=!zero!0
set a=%a:.=%&set b=%b:.=%%zero%
if %a% lss %b% set a=%b%&set b=%a%
set/a c=a/b
:begin
set/a mod=a%%b
set a=%mod%0
set/a d=a/b
set/a x+=1
if %x% neq %xxx% (
set mo=!mo!%d%
goto begin
) else (
if %d% geq 5 (
set/a d+=1
set mo=!mo!!d!
)
)
:res
if %mo:~-1% equ 0 (
set mo=%mo:~,-1%
goto res
)
echo.&if defined mo (echo [result]: %c%.%mo%) else echo [result]: %c%
pause>nul&goto 1
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-21 20:13 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
2 楼』:
未及细看,只是觉得兄弟变量清空可以简化(当然要涉及到修改下面的代码):
for /f "delims==" %%i in ('set _') do set "%%i=" ,代码是有点。。。
[ Last edited by zw19750516 on 2008-7-21 at 09:53 PM ]
|
批处理之家新域名:www.bathome.net |
|
2008-7-21 20:31 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
3 楼』:
不明白。。。
set "_*="
具体怎样才能清空变量?
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-21 20:36 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
4 楼』:
Quote: | Originally posted by pusofalse at 2008-7-21 20:36:
不明白。。。
搞错了,应该是 for /f "delims==" %%i in ('set _') do set "%%i="
具体怎样才能清空变量? |
|
把你的变量都设置成set _*=,如set "_%n%=%n%"
[ Last edited by zw19750516 on 2008-7-21 at 09:53 PM ]
|
批处理之家新域名:www.bathome.net |
|
2008-7-21 20:38 |
|
|
523066680
银牌会员
SuperCleaner
积分 2362
发帖 1133
注册 2008-2-2
状态 离线
|
|
2008-7-21 20:41 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
6 楼』:
Quote: | Originally posted by zw19750516 at 2008-7-21 08:38 PM:
把你的变量都设置成set _*=,如set "_%n%=%n%"
[ Last edited by zw19750516 on 2008-7-21 at 08:45 PM ] |
|
受教!
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-21 20:49 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
『第
7 楼』:
@echo off
for /l %%i in (1,1,10) do set "_%%i=%%i"
echo 清空前:
for /l %%i in (1,1,10) do call,echo %%_%%i%%
for /f "delims==" %%i in ('set _') do set "%%i="
pause&cls&echo 清空后:
for /l %%i in (1,1,10) do call,echo %%_%%i%%
pause>nul [ Last edited by zw19750516 on 2008-7-21 at 09:52 PM ]
|
批处理之家新域名:www.bathome.net |
|
2008-7-21 20:50 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
8 楼』:
我发现在每个变量前加_ 连清空变量的for语句 一共增加了几十个字符,减去我的那种清空变量方法的字符数,还是多出几十个。。。
看来这种方法只是对清空变量简洁 对于整个代码来说,又繁杂了一点。。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-21 21:04 |
|
|
bat-zw
金牌会员
永远的学习者
积分 3105
发帖 1276
注册 2008-3-8
状态 离线
|
|
2008-7-21 21:06 |
|
|
26933062
银牌会员
积分 2268
发帖 879
注册 2006-12-19
状态 离线
|
『第
10 楼』:
太多的变量需清空时最好 调整代码 用 setlocal 和 endlocal 是最理想的。
|
致精致简! |
|
2008-7-21 21:11 |
|
|
pusofalse
银牌会员
积分 1604
发帖 646
注册 2008-4-13
状态 离线
|
『第
11 楼』:
嗯 有道理。。。
如果变量上百上千个,这种方法的确简洁。但这个批处理大小恐怕到了几M或者十几M。。。 一般的机器运行不了。
|
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^ |
|
2008-7-21 21:12 |
|