Excel VBA生成小数点后3位的随机数
在VBA中,我需要随机生成0到1到3个小数位之间的数字,例如0.564 这项工作: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
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