获取除法的Int()值时发生Access VBA错误

获取除法的Int()值时发生Access VBA错误,vba,ms-access,Vba,Ms Access,我不知道我遗漏了什么,但下面的simple Access VBA代码段在我除以任何等于3的浮点数时返回2 注意:我已经收到了这个Int()函数的代码,但是如果需要更改以获得相同的结果,我可以更改任何内容 Sub RoundTest() Dim a, b, c a = 4.8 b = 1.6 c = Int(a / b) MsgBox (c) End Sub 你们有谁听说过这样的事吗?我在两台不同的电脑上试过,结果都一样。可能是Access编译器

我不知道我遗漏了什么,但下面的simple Access VBA代码段在我除以任何等于3的浮点数时返回2

注意:我已经收到了这个Int()函数的代码,但是如果需要更改以获得相同的结果,我可以更改任何内容

Sub RoundTest()

    Dim a, b, c

    a = 4.8
    b = 1.6

    c = Int(a / b)

    MsgBox (c)

End Sub

你们有谁听说过这样的事吗?我在两台不同的电脑上试过,结果都一样。可能是Access编译器或我的代码造成的。

问题在于Dim语句没有创建浮点数。它们都是变量数据类型。为了使其正常工作,您需要对其进行如下修改:

Sub RoundTest()
    Dim a As Single, b As Single, c As Single

    a = 4.8
    b = 1.6
    c = Int(a / b)

    MsgBox (c)
End Sub

使用
CInt()
而不是
Int()
将给出
3
作为答案。

您应始终使用
Currency
Decimal
精确处理小数:

Sub RoundTest()

    Dim a As Currency
    Dim b As Currency
    Dim c As Currency

    a = 4.8
    b = 1.6

    c = Int(a / b)

    MsgBox c   ' Returns 3.

End Sub

请注意,是浮点错误,而不是Int,导致了您的“问题”。

同样有效:D非常感谢!!这也行得通I’非常感谢你!!这与使用
变量
数据类型无关。OP的文本在传递到
Int
之前将被提升为
Double
,而
a/b
的结果也是如此。当您分配给
Single
时,实际上是在进行窄化转换,而它工作的唯一原因是您降低了计算精度。那么,如果您只进行“Dim a,b,c”,为什么会给出意外的答案呢?如果使用了该声明,它将返回2,在我试图找出解决方案之前,我对它进行了测试。将其更改为单(或双)返回3,或使用Cint。所以很明显,Int op对变量的提升是在做一些意想不到的事情,通过将变量声明为它们的实际类型(实际上,c应该是Int)解决了这个问题。