VBA round(var,1) 导致浮点错误

问题描述 投票:0回答:1

我正在使用 VBA 计算一个值并将其打印到工作表中。计算出的值是一个“单”,我想把它四舍五入到小数点后一位。出于某种原因,“round”函数四舍五入到最接近的小数,但它上面仍然有看起来像浮点数的错误。我可以手动修复此问题,但我不想每次都必须这样做,并且想了解实际发生的情况。

我使用了以下代码。

mysheet.Cells(row, ctotal).Value = Round(ttime, 1)

在一个示例中,ttime 为 2.183333,相应单元格中打印的值为 2.20000004768371。在这种情况下,我希望它打印“2.2”,之后没有其他废话。有什么想法吗?

excel vba floating-point rounding precision
1个回答
0
投票

我会用

WorksheetFunction.Round
,因为
Round
使用银行家四舍五入。

作为副作用,

WorksheetFunction.Round
的返回是一个
Double

Dim ttime As Single
ttime = 2.183333
    
Debug.Print TypeName(Round(ttime, 1)) ' returns Single
Debug.Print TypeName(WorksheetFunction.Round(ttime, 1)) ' returns Double

如果你确实想要银行家四舍五入,那么:

Round(CDbl(ttime), 1)
© www.soinside.com 2019 - 2024. All rights reserved.