赶知识网

Javascript 生成指定范围内的随机数

2010-07-25 / 7248次点击 Js/Css/jQuery
俺本来以为 Js 的随机数应该没啥, 查查手册就得了. 
查手册后才知道, 介绍的信息少得可怜呐, 没有介绍生成 m-n 范围的随机数..., 就只是给你一个 Math.random() 了事.

不过经过俺的小小努力之后, 终于让俺摸着门道喽, 问题也就理所当然滴解决掉. 

然后就写了个公式, 这样应该可以消失掉这个用法了, 公式:

1. 从1开始 至 任意值

linenum 
parseInt(Math.random()*上限+1); 

2. 从任意值开始 至 任意值

linenum 
parseInt(Math.random()*(上限-下限+1)+下限); 

上面的公式使用了 parseInt(), 因此要加1; 如果使用 Math.ceil() 则不需要加1, 俺习惯于这样写...

目录:
1. 演示1 (直接进行生成随机数操作)
2. 演示2 (写成函数进行生成随机数操作)

shawl.qiu
2006-10-28
http://blog.csdn.net/btbtd

1. 演示1 (直接进行生成随机数操作)
linenum 
<script type="text/javascript"> 
//<![CDATA[ 
    window.onload=function(){ 
        var n=na=nb=nc=''''; 
            n=parseInt(Math.random()*10+1); 
            na=parseInt(Math.random()*(20-11+1) + 11); 
            nb=parseInt(Math.random()*100+1); 
            nc=parseInt(Math.random()*(100-51+1) + 51); 
             
        var o=document.getElementsByTagName(''input''); 
            o[0].value=n; 
            o[1].value=na; 
            o[2].value=nb; 
            o[3].value=nc; 
    }
 
ASP生成指定范围内随机数:
如果你想产生一个处在某个范围内的随机数,该范围有一个大于0的下界,可以使用如下的脚本:
<%=int((upperbound - lowerbound + 1)*rnd+lowerbound)%>
例如,下面的脚本产生一个50到75之间的随机数
<%=int((75-50+1)*rnd+50)%>
无论何时使用函数rnd,它将以同样的顺序返回同样的随机数,这也许另你吃惊。考虑如下的例子:
<%
pick_greeting=int((2+1)*rnd)
select case pick_greeting
case 0
greeting="welcome!"
case 1
greeting="hello!"
case 2
greeting="happy to see you!"
end select
%>
<%=greeting%>
这个脚本建立并打印一个随机的问候语。但是,它有可能并不按你想象的方式工作。无论何时有人下载了包含这段脚本的网页,将有同样的随机问候语被打印。如果有人多次回到这个网页,他或她将得到同样的问候。一个随机数产生了,但是每次都是同样的随机数。有一个特殊的语句可以帮助解决这个问题。randomize语句用来强制函数rnd使用一个新的随机数序列。randomize语句通过计算机的系统计时器,为函数rnd提供一个新的种子值。
 
PHP产生指定范围内的随机数:
://seed用户自定义函数以微秒作为种子
function seed()
{
list($msec, $sec) = explode(' ', microtime());
return (float) $sec;
}
//播下随机数发生器种子,用srand函数调用seed函数的返回结果
srand(seed());
//输出产生的随机数,随机数的范围为10-100
echo rand(10,100);
?>
上面这个和下面这个不是没什么不同吗?都是随机输出10-100之间的数,新人学习,可能问的太简单了呵呵
<?php
echo rand(10,100);
?>
mt_rand(10,100);
srand是种子,如果不设的话默认是1
rand一般是利用种子做参数的一种固定的运算
你试一下就知道了,不设种子或者设一个固定的种子,运行rand
然后再关了浏览器再开,再运行rand
你会发现结果一直是一样的
但是如果用一个随机数做种子,那每次运行结果就近似于随机的

先说rand()函数吧,rand([int min], [int max])    本函数从min和max之间取一个随机数。若没有指定随机数的最大及最小范围,本函数会自动的从0到RAND_MAX中取一个随机数。
但是如果只用rand()这个函数,随机数的乱度很大,每次在取随机数之前最好使用srand()函数,以配置新的随机数种子。
解释一下下面这个用法(一般都是这样用这两个函数的):
srand((double)microtime()*1000000);
$rand_number= rand();
microtime()返回了两个值:当前毫秒和时间戳,我们要提取随机数,只能从毫秒中取一个随机数,(double)microtime()就只返回当前的毫秒值。
microtime()是以秒为单位的毫秒数,因而值都是小数,乘以1000000将其换算为整数。
 
 
;它们的工作流程如下:
(1):首先,给srand()提供一个”种子”;,它是一个unsigned_int类型的值。
(2):_然后,调用rand(),它会根据提供给srand()的值返回一个随机数(范围在_0~32767之间)
(3):根据需要多次调用rand(),不断得到新的随机数。
(4):无论什么时候可以给srand()提供一个新的“种子”,从而进一步“随机化”rand()的
输出结果。
有用 0 没用 0

Top10

沪ICP备09053415号 © 赶知识网