Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server float datatype

The documentation for SQL Server Float says

Approximate-number data types for use with floating point numeric data. Floating point data is approximate; therefore, not all values in the data type range can be represented exactly.

Which is what I expected it to say. If that is the case though why does the following return 'Yes' in SQL Server (unexpected)

DECLARE @D float
DECLARE @E float

set @D = 0.1
set @E = 0.5

IF ((@D + @D + @D + @D +@D) = @E)
 BEGIN
 PRINT 'YES'
 END 
ELSE
 BEGIN
 PRINT 'NO'
 END 

but the equivalent C++ program returns "No" (expected as 0.1 can't be represented exactly but 0.5 can)

#include <iostream>

using namespace std;

int main()
{
float d = 0.1F;
float e = 0.5F;

if((d+d+d+d+d) == e)
 {
 cout << "Yes";
 }
else
 {
 cout << "No";
 }
}
like image 974
Martin Smith Avatar asked Feb 07 '26 02:02

Martin Smith


1 Answers

This might be caused by different rounding strategies, the order in which operands are applied, the way intermediate results are stored and much more. See What Every Computer Scientist Should Know About Floating-Point Arithmetic for details. If you are not absolutely sure you know what you are doing, you should avoid equality comparisons in floating point number computations.

like image 163
Malte Clasen Avatar answered Feb 09 '26 09:02

Malte Clasen



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!