You get FLOAT as a result because of SQL Data Type Precedence (Look up "Data Type Precedence" in BOL).
29.99 is a valid decimal, and is a valid value that can be assigned to a FLOAT. But, because a FLOAT can store huge values, the trade-off is a loss of precision. Therefore you can assign 29.99 to a FLOAT but it cannot store that precise value and thus stores the closest thing it can. Try...
declare @x float
set @x = 29.99
SELECT @x
Result will be:
29.989999999999998
Edited by - mccork on 07/28/2003 9:42:51 PM
Cheers,
- Mark