In the Reflector extract for
Math.Round(Conversion.Fix(x)) <> Conversion.Fix(x)
All of these references are then cast to
CLng explicitly call
Math.Round before their corresponding IL
conv.ovf.i4/8 cast when casting from
This enforces the Banker's Rounding that is a VB.NET known "quirk".
conv.ovf.i4 alone truncates towards zero, which happens to be the same as
Fix (for the numbers that fit in an
Integer, or a
(When I originally typed in the question I thought I had checked that this was not the cause.)
For a while, Microsoft made the Reference Source available, so I was able to confirm they were all enclosed in
CLng and the
Math.Round is added by the compiler.
The VB.NET "source" currently available at the above link now only provides the "reference assembly" which has no code :-(