文章目录

第五十六章 Caché 函数大全 $RANDOM 函数

返回指定范围内的伪随机整数值。

大纲
$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()