在VBA中,我需要随机生成介于0和1到3位小数之间的数字。 0.564
这有效:
x = rnd
x = round(x,3)
但是没有,它会产生更多的小数
x = round(rnd, 3)
为什么它分两步而不是一步?
答案 0 :(得分:3)
Rnd function会返回单一类型的随机数。
将此值分配给Double变量会使“高精度”位未定义 您的第一个示例有效,因为您在>>分配后。
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
答案 1 :(得分:2)
我在Win 7计算机上使用Excel 2007,但我无法复制您的结果。如果我跑:
Sub poiuyt()
x = Rnd()
x = Round(x, 3)
y = Round(Rnd(), 3)
MsgBox x & vbCrLf & y
End Sub
我总是得到类似的东西:
有3个或更少的地方。如果使用这些值,由于Excel表示浮点数的方式,可能会得到稍微不精确的结果。
答案 2 :(得分:1)
这可能是因为数字0.070将显示为0.07。此外,由于我们使用了圆函数,它不会显示更多小数位。
如果您获取单元格中的值并将其格式化为带有3位小数的数字,您将看到所需的结果。
您也可以通过以下行获得结果
Round(Application.WorksheetFunction.RandBetween(1, 999) / 1000, 3)