Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA生成小数点后3位的随机数_Excel_Vba - Fatal编程技术网

Excel VBA生成小数点后3位的随机数

Excel VBA生成小数点后3位的随机数,excel,vba,Excel,Vba,在VBA中,我需要随机生成0到1到3个小数位之间的数字,例如0.564 这项工作: x = rnd x = round(x,3) 但事实并非如此,它会产生更多的小数 x = round(rnd, 3) 为什么它分两步工作而不是一步?我在Win 7机器上使用Excel 2007,无法复制您的结果。如果我跑步: Sub poiuyt() x = Rnd() x = Round(x, 3) y = Round(Rnd(), 3) MsgBox x & vbC

在VBA中,我需要随机生成0到1到3个小数位之间的数字,例如0.564

这项工作:

x = rnd
x = round(x,3)
但事实并非如此,它会产生更多的小数

x = round(rnd, 3)

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

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

Sub poiuyt()
    x = Rnd()
    x = Round(x, 3)
    y = Round(Rnd(), 3)
    MsgBox x & vbCrLf & y
End Sub
我总是得到这样的东西:


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

这可能是因为当数字0.070显示为0.07时。因为我们使用了舍入函数,所以它也不会显示更多的小数位数

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

您也可以使用下面的行获得结果

Round(Application.WorksheetFunction.RandBetween(1, 999) / 1000, 3)
返回类型为单个的随机数

将其分配给双变量将保留未定义的“更高精度”位。
您的第一个示例很有效,因为您在作业后取整

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
-->


还有多少?x的类型是什么?如果我记得函数VBA Round使用银行家舍入。这可能是原因。如果使用“工作表取整”功能,结果是否相同?在我的机器上,两种方法都有效。你是说第二个坏了吗?如果是,您使用什么应用程序来运行VBA宏?我用Excel 2010进行测试。考虑将安德烈的解决方案标记为EngReStIt,它看起来像是发生了,因为我声明了我的变量是双变量,如果我不声明它是有效的,而我得到3个小数。这为什么会导致更改?@erikrasumssen通过将其声明为
Double
,您可能会强制使用不精确的表示法。@erikrasumssen:the返回一个类型为Single的随机数。将其分配给双变量会使“更高精度”位未定义。你的第一个例子是有效的,因为你在作业后轮换。
 0,862619340419769 
 0,863 

 0,790000021457672 

 0,3735362 
 0,374 

 0,054