I see that even if you set
@v1 sql_variant = cast ('15.00' as float(53)),
@v2 sql_variant = cast ('16.00' as decimal(18,4)),
which makes
v1 v2
1516.0000
SQL Server still says v1 > v2.
This behaviour is very counter-intuitive - to say nothing of being arithmetically incorrect!
It would be better if it produced the result one would expect - or if it won't, if it refused to do such comparisons. I can imagine many data errors being caused by people not noticing this behaviour and believing the wrong results they get.