VBA – 两个值之间的随机数
我见过多个答案,说下面的algorithm可以很好地生成两个值之间的随机数。 我得到了虚假的结果,我有时会得到一个高于上限的值。
Dim random as Integer random = Int (3 - 0 + 1) * Rnd + 0 Debug.Print random
这应该给0至3之间的值是正确的? 运行几次时,我看到0到4 ..
这是VBA的特质之一。
你可以通过写作更清楚地看到效果
random = Int(4) * Rnd
4 * Rnd
是一个浮点型双 4 * Rnd
型,当它被赋值为random
,应用与CInt
相同的舍入约定1 ; 即如果Int(4) * Rnd
是3.5或更大,结果是4。
解决的办法是写
random = Int(4 * Rnd)
1 “半到平”的惯例通常被称为银行家舍入 。 请参阅https://en.wikipedia.org/wiki/Rounding#Round_half_to_even
我认为当将浮点数明确地转换为整数时是可以预料的,但是可能不能预期的是舍入是朝向最接近的偶数:
Dim i As Integer i = 3.5 ' i = 4 i = "2.5" ' i = 2