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

问题描述 投票:0回答:2

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

非常感谢帮助。

ms-access access-vba
2个回答
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的结果。如果将long值除以100,则将结果舍入为2位是没有意义的,因为它永远不会超过2位。

但请注意,Access不支持Currency值的计算。如果你计算CCur(lng) / CCur(100),结果将是Double。你可以用TypeName(CCur(lng) / CCur(100))测试一下。与Double相比,Single的精度提高了一倍。


0
投票

我将付费从单一更改为货币,结果现在正确无误。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.