表字段是4位十进制,而原始数据仅是2位十进制

时间:2019-03-09 16:01:04

标签: ms-access access-vba

我使用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)

非常感谢您的帮助。

2 个答案:

答案 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)

我将“已付款”从“单一”更改为“货币”,现在结果是正确的。谢谢。