我使用Round(Paid,2)为Me.Amt赋值。结果应四舍五入为两位小数。但是,它不是两位小数。我使用下面的代码进行测试。Amt字段是Currency字段。小数位数为自动。Me.Amt格式为货币,小数位为auto。
结果应为47340.14。但是,它在Me.Amt和表记录上都是47340.1484。
Dim lng As Long
lng = 4734015
Me.Amt = 0
Me.Amt = CSng(l / 100)非常感谢您的帮助。
发布于 2019-03-10 00:45:00
出现问题是因为CSng将结果转换为精度约为7位十进制数字的Single值。像47340.15这样的值不能用有限数量的二进制小数位来表示。
只需删除CSng即可。
我做了一个测试
Private Sub Command2_Click()
Dim lng As Long
lng = 4734015
Me.Amt = lng / 100
End Sub得到了47340.15的结果。如果将长整型值除以100,则没有必要将结果四舍五入为2位数,因为它永远不会超过2位数。
但请注意,Access不支持对Currency值进行计算。如果计算CCur(lng) / CCur(100),结果将是Double。您可以使用TypeName(CCur(lng) / CCur(100))测试这一点。与Single相比,Double的精度提高了一倍。
发布于 2019-03-10 01:14:32
我将支付从单一货币更改为货币,结果现在是正确的。谢谢。
https://stackoverflow.com/questions/55079182
复制相似问题