我使用Round(Paid,2)
分配给Me.Amt
。结果应四舍五入到两位小数。但是,它不是两位数的十进制。我使用下面的代码进行测试。 Amt
字段是Currency
字段。小数位是自动的。 Me.Amt
格式为货币,小数位为自动。
结果应为47340.14
。但是,它在47340.1484
和表记录上都是Me.Amt
。
Dim lng As Long
lng = 4734015
Me.Amt = 0
Me.Amt = CSng(l / 100)
非常感谢您的帮助。
答案 0 :(得分:0)
之所以出现问题,是因为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))
进行测试。与Double
相比,Single
的精度提高了一倍。
答案 1 :(得分:0)
我将“已付款”从“单一”更改为“货币”,现在结果是正确的。谢谢。