**Operator Type:**

**Operator Scope of Action:**

**Operator Purpose:**

**Data Type Returned:**

**Operator First Added:**

**Operator in Current Baseline:**

**Operator Last Altered:**

**Operator Has Optional Arguments:**

Function [other Function type actions]

Item [operators of similar scope]

Mathematical [other Mathematical operators]

Number [about Number data type]

v4.0.0

Baseline

9.5.2

**Syntax note:** Operators without any defined mandatory arguments may omit their empty closing parentheses

**rand([maxNumber])**

rand()

**rand**

rand() returns a pseudo-random number between 0 and 1. No argument is required.

rand([maxNumber])

From v9.5.2, supplying an optional parameter **maxNumber**, which must be an integer, returns a random *integer* between 0 and **maxNumber**-1. This can be useful when wanting random list items, noting that list items are addressed using zero-based integers.

N.B. if working with list-based items, consider the list.randomItem() operator (new to v9.5.2), which abstracts away the need to know the size of the list. Essentially it encapsulates calling `list.at(rand(list.count))`

, so much easier to write/use

**Getting 1-based ranges vs. zero-based ranges of values**

Consider the original round() method:

`$MyNumber=round(rand()*10);`

$MyNumber will be set to one of *eleven* integers in the range 0 through to 10. But, what if the '10' argument about is actually a child count:

`$MyNumber=round(rand()*$ChildCount);`

If the $ChildCount was 10 and $MyNumber were used to fetch a random child using $SiblingOrder($MyNum) the process would fail if $MyNumber were zero as $SiblingOrder numbers from 1. Indeed, in this case the need is for *ten* integers, one through to ten.

Previously, 1-based range can be achieved:

`$MyNumber=round(rand()*(10-1))+1;`

`$MyNumber=round(rand()*($ChildCount-1))+1;`

If the main input is 10, by subtracting 1 the process returns a randomised integer in in the range 0-9 (*ten* numbers) and then adding back 1 shifts the value range to 1-10.

Using the newer **rand(maxNumber)** method the above becomes:

`$MyNumber=round(rand($ChildCount-1))+1;`

This is why the list.randomItem() may be an easier clear approach.

**See also**—notes linking to here: