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)