VBA生成随机数到3位小数

在VBA中,我需要随机生成0到1之间的数字到小数点后3位。 0.564

这工作:

x = rnd x = round(x,3) 

但是这不,它会产生更多的小数

 x = round(rnd, 3) 

为什么它分两步工作,而不是一个?

Rnd函数返回一个types为Single的随机数。

将此分配给Doublevariables会使“更高精度”位不确定。
你的第一个例子是有效的,因为你分配之后舍入。

 Sub TestRnd() Dim dbl As Double Dim v As Variant dbl = Rnd Debug.Print dbl dbl = Round(dbl, 3) Debug.Print dbl dbl = Round(Rnd, 3) Debug.Print dbl v = Rnd Debug.Print v v = Round(v, 3) Debug.Print v v = Round(Rnd, 3) Debug.Print v End Sub 

– >

  0,862619340419769 0,863 0,790000021457672 0,3735362 0,374 0,054 

我在Win 7机器上使用Excel 2007,我无法复制您的结果。 如果我运行:

 Sub poiuyt() x = Rnd() x = Round(x, 3) y = Round(Rnd(), 3) MsgBox x & vbCrLf & y End Sub 

我总是得到像这样的东西:

在这里输入图像说明

有3个或更less的地方。 如果使用这样的值,由于Excel表示浮点数的方式,可能会得到稍微不精确的结果。

这可能是因为当数字0.070将显示为0.07。 另外它不会显示更多的小数位,因为我们已经使用了循环函数。

如果您将单元格中的值作为带3位小数的数字进行格式化,您将会看到所需的结果。

你也可以用下面的命令获得结果

 Round(Application.WorksheetFunction.RandBetween(1, 999) / 1000, 3)