VBA生成随机数到3位小数

时间:2016-10-07 12:01:42

标签: excel vba

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

这有效:

x = rnd
x = round(x,3)

但是没有,它会产生更多的小数

x = round(rnd, 3)

为什么它分两步而不是一步?

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

我总是得到类似的东西:

enter image description here

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

答案 2 :(得分:1)

这可能是因为数字0.070将显示为0.07。此外,由于我们使用了圆函数,它不会显示更多小数位。

如果您获取单元格中的值并将其格式化为带有3位小数的数字,您将看到所需的结果。

您也可以通过以下行获得结果

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