Это отличная статья, описывающая , когда использовать float и decimal . Float хранит приблизительное значение, а десятичное - точное.
Таким образом, точные значения, такие как деньги, должны использовать десятичную дробь, а приблизительные значения, такие как научные измерения, должны использовать float.
Вот интересный пример, который показывает, что и float, и десятичная дробь способны терять точность. При добавлении числа, которое не является целым числом, а затем вычитании того же числа с плавающей запятой, теряется точность, в то время как десятичная дробь не имеет:
DECLARE @Float1 float, @Float2 float, @Float3 float, @Float4 float;
SET @Float1 = 54;
SET @Float2 = 3.1;
SET @Float3 = 0 + @Float1 + @Float2;
SELECT @Float3 - @Float1 - @Float2 AS "Should be 0";
Should be 0
----------------------
1.13797860024079E-15
При умножении нецелого числа и делении на это же число десятичные дроби теряют точность, а плавающие - нет.
DECLARE @Fixed1 decimal(8,4), @Fixed2 decimal(8,4), @Fixed3 decimal(8,4);
SET @Fixed1 = 54;
SET @Fixed2 = 0.03;
SET @Fixed3 = 1 * @Fixed1 / @Fixed2;
SELECT @Fixed3 / @Fixed1 * @Fixed2 AS "Should be 1";
Should be 1
---------------------------------------
0.99999999999999900