返回指定范围内的伪随机整数值。
大纲$RANDOM(range)
$R(range)
参数
- range 一个非零正整数,用于指定可能的随机数范围的上限。
$RANDOM
返回介于0和range-1(含)之间的伪随机整数值。因此$RANDOM
(3)返回0、1、2,但不返回3。返回的数字在指定范围内均匀分布。
$RANDOM
对于大多数用途来说是足够随机的。需要严格随机值的应用程序应使用%SYSTEM.Encryption
类的GenCryptRand()
方法。
range
此值指定可能的随机数范围的上限;最高的随机数是范围减1。范围值可以是非零正整数值,整数变量的名称或任何计算为非零正整数的有效ObjectScript表达式。最大范围值为1E17
(100000000000000000);指定超出此最大值的值将导致错误。 $RANDOM(1)
有效,但始终返回0。$RANDOM(0)
导致<FUNCTION>
错误。
以下示例返回一个从0到24(含)的随机数。
DHC-APP>WRITE $RANDOM(25)
1
DHC-APP>WRITE $RANDOM(25)
21
要返回带有小数部分的随机数,可以使用串联运算符(_
)或加法运算符(+
),如以下示例所示:
/// d ##class(PHA.TEST.Function).RANDOM()
ClassMethod RANDOM()
{
SET x=$RANDOM(10)_$RANDOM(10)/10
WRITE !,x
SET y=$RANDOM(10)+($RANDOM(10)/10)
WRITE !,y
}
DHC-APP>d ##class(PHA.TEST.Function).RANDOM()
3.9
6.1
DHC-APP>d ##class(PHA.TEST.Function).RANDOM()
9.1
5.2
该程序返回一个小数位数,范围在.0到9.9(含)之间的数字。使用任一运算符,Caché都会删除任何前导零和尾随零(如果小数部分为零,则删除小数点)。但是,如果两个$RANDOM
函数都返回零(0和.0),则Caché返回零(0)。
以下示例模拟了两个骰子的掷骰:
/// d ##javaclass(PHA.TEST.Function).RANDOM1()
ClassMethod RANDOM1()
{
FOR {
READ "Roll dice? ",reply#1
IF "Yy"[reply,reply'="" {
WRITE !,"Pair of dice: "
WRITE $RANDOM(6)+1,"+",$RANDOM(6)+1,!
} ELSE {
QUIT
}
}
}
DHC-APP>d ##class(PHA.TEST.Function).RANDOM1()
Roll dice? y
Pair of dice: 1+6
DHC-APP>d ##class(PHA.TEST.Function).RANDOM1()
Roll dice? y
Pair of dice: 6+1
返回0-256 ascii
所以有一些字符显示乱码
w ##class(%system.Encryption).GenCryptRand(8,0)
8位随机数字
w ##class(%SYSTEM.Encryption).GenCryptToken()