• I think the intermediate result from @v1 / @v2 is being truncated because you're using smallmoney data type.

    Can you use a different datatype, or cast one value to decimal to make it clearer what's happening.

    e.g.

    select round((CAST(@v1 as decimal(18,2)) / @v2 ) * @v3 ,2) --Statement 2

    or

    declare @v1 smallmoney = 1400.05,

    @v2 smallmoney = 4232.33,

    @v3 smallmoney = 4180.06

    select round((CAST(@v1 as decimal(18,2)) / @v2 ) * @v3 ,2), --Statement 2

    CAST(@v1 as decimal(18,2)) / @v2,

    CAST(round((CAST(@v1 as decimal(18,2)) / @v2 ) * @v3 ,2) as SmallMoney) -- <----<<<