第五十六章 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()