mwo*_*e02 8 ms-access vba access-vba
解释为什么Access.Application.Eval()(通常缩写为Eval())产生的结果不同于在这种情况下仅评估原始表达式:
Debug.Print Round(.575 * 100)
57
Debug.Print Eval("Round(.575 * 100)")
58
Run Code Online (Sandbox Code Playgroud)
编辑:为了解决GSerg的答案,以下仍然会返回不同的结果:
Debug.Print Eval("Round(CSng(.575) * 100)")
57
Debug.Print Round(CSng(.575) * 100)
58
Run Code Online (Sandbox Code Playgroud)
该乘法在Eval()下返回不同的产品,但我不明白为什么.
Debug.Print (.575 * 100) < 57.5
True
Debug.Print Eval("(.575 * 100) = 57.5")
-1
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,产品小于57.5,因此Round()将其舍入到57.
在第二种情况下,产品等于57.5,因此Round()将采用其标准的"round to even"方法来收益58.
编辑:你们都是对的,Eval()将文字值强制转换为不同的数据类型.
? TypeName(.575)
Double
? Eval("TypeName(.575)")
Decimal
? Round(CDec(.575) * 100)
58
Run Code Online (Sandbox Code Playgroud)