圆形和 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 数据类型 Single
。 See here
当 Round
传递 numdecimalplaces
> 0 和一个 Single
值时,它支持该数据类型,并且 returns 一个 Single
。 WorksheetFunction.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" 将其转换回数字
为什么生成的 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 数据类型 Single
。 See here
当 Round
传递 numdecimalplaces
> 0 和一个 Single
值时,它支持该数据类型,并且 returns 一个 Single
。 WorksheetFunction.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" 将其转换回数字