Curious behavior of Access.Application.Eval()
ms-access, vba
Solution
That multiplication returns a different product under Eval(), but I don't understand why.
Debug.Print (.575 * 100) < 57.5
True
Debug.Print Eval("(.575 * 100) = 57.5")
-1
In the first case, the product is less than 57.5, so Round() will round it down to 57.
In the second case, the product is equal to 57.5, so Round() will apply its standard "round to even" approach to yield 58.
Edit: You all are right that Eval() coerces the literal value to a different data type.
? TypeName(.575)
Double
? Eval("TypeName(.575)")
Decimal
? Round(CDec(.575) * 100)
58
Problem
Explain why `Access.Application.Eval()` (commonly abbreviated as `Eval()`) produces a different result than just evaluating the original expression in this case: ``` Debug.Print Round(.575 * 100) 57 Debug.Print Eval("Round(.575 * 100)") 58 ``` EDIT: To address GSerg's answer, the following still returns different results: ``` Debug.Print Eval("Round(CSng(.575) * 100)") 57 Debug.Print Round(CSng(.575) * 100) 58 ```