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 ```

Original source