That may seem a little harsh, and it’s not always true. However, most of the time, the float data type should be avoided. Unfortunately, the float (and real) data types are approximate data types that can lead to significant rounding errors.
How to detect this problem:
Select Table_Name + '.' + Column_Name As Name, 'Table' As ObjectType
From Information_Schema.Columns
Where Data_Type in ('Float', 'Real')
UNION ALL
SELECT Name, Types.Description
FROM (
SELECT S.Name, S.XType, C.TEXT
FROM sysobjects S
INNER Join syscomments C
ON S.id = C.id
And S.xtype in ('P', 'v', 'TF', 'FN')
WHERE OBJECTPROPERTY(S.ID, N'IsMSShipped') = 0
UNION All
SELECT OBJECT_NAME(A.id), s.XType, LeftText + RightText
FROM sysobjects s
INNER Join (
SELECT Id, RIGHT(TEXT, 10) AS LeftText, ColId
FROM syscomments
) AS A
ON S.id = A.id
And OBJECTPROPERTY(S.ID, N'IsMSShipped') = 0
And S.xtype in ('P', 'v', 'TF', 'FN')
INNER Join (
SELECT Id, LEFT(TEXT, 10) AS RightText, ColId
FROM syscomments
) AS B
ON A.id = B.id
and A.ColId = B.ColId - 1
) AS A
Inner join (
Select 'FN' As XType, 'Function' As Description
Union All
Select 'P' As XType, 'Procedure' As Description
Union All
Select 'V' As XType, 'View' As Description
Union All
Select 'TF' As XType, 'Table Values Function' As Description
) As Types
On A.XType = Types.XType
WHERE TEXT Like '%float[^(]%'
ORDER BY Name
How to correct it: Examine the data you are using and identify the precision and scale required. Change the data type (or code) to use a decimal with the precision and scale you require.
Level of severity: Moderate
Level of difficulty: Easy