VBA - 两个值之间的随机数

时间:2017-09-07 11:00:58

标签: excel vba

我看到多个答案说下面的算法可以很好地生成两个值之间的随机数。我得到了虚假的结果,我有时会得到一个高于上限的值。

Dim random as Integer
random = Int (3 - 0 + 1) * Rnd + 0
Debug.Print random

这应该给0到3之间的值吗?我跑几次时看到0到4 .. ???

enter image description here

2 个答案:

答案 0 :(得分:2)

这是VBA的特质之一。

通过编写

,您可以更清楚地看到效果
random = Int(4) * Rnd

4 * Rnd浮点双类型,当它被分配到random时,将应用与CInt相同的舍入约定 1 ;即如果Int(4) * Rnd为3.5或更大,则结果为4.

修复是写

random = Int(4 * Rnd)

1 惯例“圆半到均匀”通常被称为 Banker's Rounding 。看到 https://en.wikipedia.org/wiki/Rounding#Round_half_to_even

答案 1 :(得分:1)

我认为在将浮点数显式转换为整数时可以预期,但可能没有预料到的是舍入是最接近的偶数:

Dim i As Integer
i = 3.5           ' i = 4
i = "2.5"         ' i = 2