圆形和 WORKSHEETFUNCTION.ROUND

ROUND and WORKSHEETFUNCTION.ROUND

为什么生成的 A1 (0.224) 和 B1 (0.224000006914139) 不同?

Sub a()
Cells(1, 1) = Application.WorksheetFunction.Round(Rnd(-1), 4)
Cells(1, 2) = Round(Rnd(-1), 4)
Cells(1, 3) = "=a1=b1"
Cells(1, 4) = "'0.2240"
End Sub

如何复制 B1 并粘贴到小数点后四位的 D1 而不会丢失尾随零?我可以用 rnd(-1)cells(1,2) 改变最后的 "'0.2240" 吗?非常感谢。

您的问题源于 Rnd returns 数据类型 SingleSee here

Round 传递 numdecimalplaces> 0 和一个 Single 值时,它支持该数据类型,并且 returns 一个 SingleWorksheetFunction.Round 不是:它 returns 是双倍的。 (如果 Round 传递了一个 Double,它 returns 一个 Double

这在 VBA 本身 内并不重要(请参阅下面的手表 Window 图片以获取证据)

当值被放置在 Excel 单元格中,并且被转换为 Excel 的单元格数据类型时,会出现此问题。 Single 的转换会导致浮点精度问题

要解决此问题,您的代码可以是

Cells(1, 2) = Round(CDbl(Rnd(-1)), 4)

要将结果放入 Cell(1, 4) 作为文本 ,您可以使用

Cells(1, 4) = "'" & Format(Cells(1, 2), "0.0000")

Cells(1, 4) = "'" & Cells(1, 2).Text

注意:"'" & 是必要的,因为 Excel 将字符串识别为数字,并且 "helpfully" 将其转换回数字