标题: [已结]set /a 中 %取余的用法!
[打印本页]
作者: logictianjin
时间: 2007-4-12 22:32
标题: [已结]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 ]
作者: lililulula
时间: 2007-4-12 23:10
楼主 我也是菜鸟 但是你说的取余的话 对于固定的比较小的除数我想你可以试试这样
set b=%random%
set /a c=%b%-%b%/3-%b%/3-%b%/3
echo %c%
pause
例子中除数为3,因此做3次减运算,被除数为随即生成0到32767之间的数,当然除数超过10了或者更大这种方法就不好,因为我也是在学习,目前只想的到这样最笨的方法
作者: bjsh
时间: 2007-4-12 23:19
set /a p=%random%%20+1
是把随机数的范围约束在 (1,20)
set /a p=%random%%3+1
同样 (1,3)
作者: logictianjin
时间: 2007-4-12 23:40
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
作者: bjsh
时间: 2007-4-13 00:02
是的如果没有0的话;
(0,19)
作者: logictianjin
时间: 2007-4-13 00:05
Quote: |
Originally posted by bjsh at 2007-4-12 11:02 AM:
是的如果没有0的话;
(0,19) |
|
那可以不可以这样写?
set /a p=%random%%20+0
作者: bjsh
时间: 2007-4-13 00:16
可以啊!
(0,19)
在批处理中还需要考虑%的问题;
应该是 set /a p=%random%%%20+0
作者: logictianjin
时间: 2007-4-13 00:30
Quote: |
Originally posted by bjsh at 2007-4-12 11:16 AM:
可以啊!
(0,19)
在批处理中还需要考虑%的问题;
应该是 set /a p=%random%%%20+0 |
|
为什么是(0,19)而不是(0,20)呢?
作者: bjsh
时间: 2007-4-13 00:51
什么数除以20能余20啊!呵呵;
无论什么数 除以20后的余数只能是 (0,19)
这也是%random%%20+1能把随机数约束到(1,20)的原因
作者: logictianjin
时间: 2007-4-13 01:15
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 那余是多少? 也就是这个
余到底是怎么算出来的?
作者: bjsh
时间: 2007-4-13 01:16
余不就是整除后剩下的余数吗,呵呵
30000/20=1500 当然是余0了
作者: logictianjin
时间: 2007-4-13 01:18
我看我是学傻了,连小学的数学都不会算了,哈哈哈 !!!多谢兄弟的指点
作者: nanhui112
时间: 2007-11-19 11:53
[0 20) [0 19]