用VBA中的round函数计算“四舍六入五留双”时遇到奇怪的问题:
发布网友
发布时间:2022-06-01 05:41
我来回答
共4个回答
热心网友
时间:2023-11-25 00:50
VBA是4舍6入5成双,用DECIMAL类型可以完美解决:
Public Function VBROUND45(ByVal A, ByVal B)
CDA = CDec(A)
CDB = CDec(B)
VBROUND45 = Application.Round(CDA, CDB)
End Function
(出错的原因是因为默认是单精度 或双精度,单/双双精度小数位的会出现损失(16.275实际是16.27499999...),这是计算机本身2进制的固有缺陷,目前只有DECIMAL可完美解决(29位数据宽度以内),此函数放在“模块中”,在Excel单元格中就可以直接使用了。VBROUND45(16.275,2)=16.28)
热心网友
时间:2023-11-25 00:51
的确是这样的。
我还遇到过其他数学函数也有类似小错误,找不出原因,只好其他办法达到目的。
这可能是VBA本身的缺陷。
热心网友
时间:2023-11-25 00:51
可以把小数转换为Currency
Sub fn()
Dim i As Integer
For i = 0 To 100
Debug.Print Round(CCur(0.275) + i, 2)
Next
End Sub
热心网友
时间:2023-11-25 00:52
四舍六入五留双是什么意思呀?
你引用工作表函数试下
application.round(x,2)追问application.round(x,2) 实际是调用了excel中的函数,就是简单的四舍五入法,与VBA中的round函数计算结果不完全一样。