使用随机数

函数RND（）是一个非常重要的函数。如果你想建立一个随机的问候语，一个日期的随机提示，或者甚至一个游戏，你将要使用这个函数。

函数RND（）返回一个0到1之间的随机数。这里有这个函数的一个例子及其可能的返回值：

<%=RND()%>

> 0.7055643

典型情况下，你更感兴趣的是用这个函数来返回处在一定范围内的整数。要返回一个大于等于0而小于某个特定整数的数字，你可以使用如下的语句：

<%=INT((upperbound+1)*RND)%>

用你想产生的最大随机数代替表达式upperbound。例如，下面的脚本返回一个0和5之间的数，包括0和5：

<%=INT(5+1)*RND)%>

如果你想产生一个处在某个范围内的随机数，该范围有一个大于0的下界，可以使用如下的脚本：

<%=INT((upperbound

– lowerbound + 1)*RND+lowerbound)%>

例如，下面的脚本产生一个50到75之间的随机数（包括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（）提供一个新的种子值。下面的例子显示了如何修改上面的例子，使其正确工作：

<%

RANDOMIZE

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（）使用新的随机数序列。

最后，如果你对函数RND（）所产生的数值的分布感到好奇，你可以用下面的脚本来确定它：

<%

CONST upperbound=9,iterations=100

REDIM DIST(upperbound)

RANDOMIZE

FOR i=1 to iterations

rnd_num=INT（(upperbound+1)*RND)

DIST(rnd_num)=DIST(rnd_num)&

”#”

NEXT

FOR i=0 to upperbound

%>

<%=i&

” : “&DIST(i)%><BR>

<%

NEXT

%>

这段脚本在0到9之间产生100个随机数。它跟踪对于每一个值有多少个随机数产生。最后，它打印一个代表结果的条形图（见图8.3）。

图8.3 随机数的分配