中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 批处理计算小数 上一主题 | 下一主题
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
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 5 楼』:  

清空变量应该就是  直接set n=吧



综合型编程论坛

我的作品索引
  
2008-7-21 20:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
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
状态 离线
『第 9 楼』:  

如果你有上万个要清空的变量呢?



批处理之家新域名:www.bathome.net
2008-7-21 21:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
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
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: