中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: [已结]set /a 中 %取余的用法! 上一主题 | 下一主题
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『楼 主』:  [已结]set /a 中 %取余的用法!

@echo off&setlocal EnableDelayedExpansion
for /l %%a in (1,1,5) do (
  set /a yunsuan=!random!%%20+1
  @echo !yunsuan!)

以上是我瞎写的一段,我知道random可以随机返回 0 到 32767 之间的任意十进制数字 我对取余是一窍不通,以上的代码不会产生大于20的数字,请给讲下取余是怎么取的?!random!%%20+1
反正我按除法是理解不了!

[ Last edited by logictianjin on 2007-4-12 at 12:19 PM ]

2007-4-12 22:32
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lililulula
中级用户





积分 302
发帖 138
注册 2007-3-29
状态 离线
『第 2 楼』:  

楼主 我也是菜鸟 但是你说的取余的话 对于固定的比较小的除数我想你可以试试这样
set b=%random%
set /a c=%b%-%b%/3-%b%/3-%b%/3
echo %c%
pause
例子中除数为3,因此做3次减运算,被除数为随即生成0到32767之间的数,当然除数超过10了或者更大这种方法就不好,因为我也是在学习,目前只想的到这样最笨的方法

2007-4-12 23:10
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 3 楼』:  

set /a p=%random%%20+1

是把随机数的范围约束在 (1,20)

set /a p=%random%%3+1

同样 (1,3)

2007-4-12 23:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by bjsh at 2007-4-12 10:19 AM:
set /a p=%random%%20+1

是把随机数的范围约束在 (1,20)

set /a p=%random%%3+1

同样 (1,3)

如果没有后面的+1是不是就有可能会产生0

2007-4-12 23:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 5 楼』:  

是的如果没有0的话;
(0,19)

2007-4-13 00:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by bjsh at 2007-4-12 11:02 AM:
是的如果没有0的话;
(0,19)

那可以不可以这样写? set /a p=%random%%20+0

2007-4-13 00:05
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 7 楼』:  

可以啊!
(0,19)

在批处理中还需要考虑%的问题;

应该是 set /a p=%random%%%20+0

2007-4-13 00:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『第 8 楼』:  



  Quote:
Originally posted by bjsh at 2007-4-12 11:16 AM:
可以啊!
(0,19)

在批处理中还需要考虑%的问题;

应该是 set /a p=%random%%%20+0

为什么是(0,19)而不是(0,20)呢?

2007-4-13 00:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 9 楼』:  

什么数除以20能余20啊!呵呵;

无论什么数 除以20后的余数只能是 (0,19)

这也是%random%%20+1能把随机数约束到(1,20)的原因

2007-4-13 00:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by bjsh at 2007-4-12 11:51 AM:
什么数除以20能余20啊!呵呵;

无论什么数 除以20后的余数只能是 (0,19)

这也是%random%%20+1能把随机数约束到(1,20)的原因

越说越糊涂了,比如30000/20=1500 那余是多少? 也就是这个到底是怎么算出来的?

2007-4-13 01:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 11 楼』:  

余不就是整除后剩下的余数吗,呵呵

30000/20=1500  当然是余0了

2007-4-13 01:16
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
logictianjin
初级用户





积分 58
发帖 25
注册 2006-11-29
状态 离线
『第 12 楼』:  

我看我是学傻了,连小学的数学都不会算了,哈哈哈 !!!多谢兄弟的指点

2007-4-13 01:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
nanhui112
初级用户





积分 127
发帖 59
注册 2007-11-13
状态 离线
『第 13 楼』:  

[0 20)  [0 19]

2007-11-19 11:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: