Home  /  Resources & support  /  FAQs  /  Comparing floating-point values

Why can’t I compare two values that I know are equal?

Title   Comparing floating-point values (the float function)
Author Jeremy B. Wernow, StataCorp

If you try to compare the value of a floating-point variable to a known value, you may not get the results you expect.

. list
        
    +-----+
    |   x |
    |-----|
 1. | 7.3 |
 2. | 7.3 |
 3. | 7.3 |
    +-----+
        
. list if x==7.3
        
. describe
        
Contains data
 obs:             3                          
vars:             1                          
size:            24 (99.9% of memory free)
-----------------------------------------------------------------------
             storage  display     value
variable name   type   format      label      variable label
------------------------------------------------------------------------
x               float  %9.0g                  
------------------------------------------------------------------------
Sorted by:  
     Note:  dataset has changed since last saved

This occurs because of a binary rounding error. There is no way to exactly represent most noninteger numbers using a binary system. To get around this, you can use the float() function (not the cast type). To round the above expression to its floating-point value, type

. list if x ==float(7.3)
        
    +-----+
    |   x |
    |-----|
 1. | 7.3 |
 2. | 7.3 |
 3. | 7.3 |
    +-----+

To read more about floating-point precision, see [U] 13.12 Precision and problems therein.