提问人:Jacob Shaw 提问时间:5/11/2023 更新时间:5/11/2023 访问量:76
VBA round(var,1) 导致浮点错误
VBA round(var,1) results in floating point error
问:
我正在使用VBA计算值并将其打印到工作表中。计算值是“单个”,我想将其四舍五入到小数点后一位。出于某种原因,“round”函数四舍五入到最接近的小数点,但它仍然有看起来像浮点误差的东西。我可以手动修复此问题,但我宁愿不必每次都这样做,并且想知道实际发生了什么。
我使用了以下代码。
mysheet.Cells(row, ctotal).Value = Round(ttime, 1)
在一个示例中,ttime 为 2.183333,相应单元格中打印的值为 2.20000004768371。我希望它在这种情况下打印“2.2”,此后没有其余的废话。有什么想法吗?
答:
2赞
BigBen
5/11/2023
#1
我会使用 ,因为 Round
使用庄家舍入。WorksheetFunction.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)
您可以通过更改单元格的 :.NumberFormat
mysheet.Cells(row, ctotal).NumberFormat = "0.0"
评论
Round
众所周知,这是有问题的。这在我的库中得到了解决,用于精确舍入:VBA。圆形。Round
WorksheetFunction.Round
.NumberFormat