我使用Round(Paid,2)
分配给Me.Amt
。结果应该舍入到两位十进制数。但是,它不是两位十进制数。我使用下面的代码来测试。 Amt
场是Currency
场。小数位数是自动的。 Me.Amt
格式是货币,小数位是auto。
结果应该是47340.14
。但是,47340.1484
和桌面记录都是Me.Amt
。
Dim lng As Long
lng = 4734015
Me.Amt = 0
Me.Amt = CSng(l / 100)
非常感谢帮助。
之所以出现这个问题,是因为CSng
将结果转换为精度约为7位小数的Single
值。像47340.15
这样的值不能用有限数量的二进制小数位表示。
只需删除CSng
。
我做了一个测试
Private Sub Command2_Click()
Dim lng As Long
lng = 4734015
Me.Amt = lng / 100
End Sub
并得到了47340.15
的结果。如果将long值除以100,则将结果舍入为2位是没有意义的,因为它永远不会超过2位。
但请注意,Access不支持Currency
值的计算。如果你计算CCur(lng) / CCur(100)
,结果将是Double
。你可以用TypeName(CCur(lng) / CCur(100))
测试一下。与Double
相比,Single
的精度提高了一倍。
我将付费从单一更改为货币,结果现在正确无误。谢谢。