Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Real vs Float

Tags:

sql

sql-server

Let's say I have the following 2 queries:

select sum(cast(2666 as float)) * cast(.3 as float)
select sum(cast(2666 as real)) * cast(.3 as real)

The 1st query returns: 799.8
The 2nd query returns: 799.800031781197

Why does the 2nd query not return the same thing as the 1st?

like image 701
Cole W Avatar asked May 22 '12 18:05

Cole W


People also ask

Should I use float or real?

float is used to store approximate values, not exact values. It has a precision from 1 to 53 digits. real is similar but is an IEEE standard floating point value, equivalent to float(24). Neither should be used for storing monetary values.

What is a float in SQL?

The FLOAT data type is an approximate number with floating point data. FLOAT value is approximate which means not all values can be represented exactly.

Should I use float or decimal SQL Server?

Float stores an approximate value and decimal stores an exact value. In summary, exact values like money should use decimal, and approximate values like scientific measurements should use float. When multiplying a non integer and dividing by that same number, decimals lose precision while floats do not.

What is real and float?

Real is a Single Precision Floating Point number, while Float is a Double Precision Floating Point number. The Floating point numbers can store very large or very small numbers than decimal numbers.


1 Answers

Binary floating point types (like real and float) cannot exactly represent decimal numbers. In particular it is not possible to exactly store 0.3 as a binary floating point number. Instead a number very close to 0.3 is stored. This is called a representation error.

The size of the error is different for real and float because they have different precision.

If you want to store decimal numbers more accurately, consider using decimal or numeric. But note that even though these types can accurately store decimal values up to a certain number of digits, calculations can still produce numbers that cannot be represented exactly. For example the result of 0.1 / 0.3 can not be stored exactly in a decimal even though both 0.1 and 0.3 can. In this case the result will be rounded to the nearest value that can be stored in the type (e.g. 0.333333333 depending on the precision).

like image 75
Mark Byers Avatar answered Oct 03 '22 01:10

Mark Byers