Cytując książkę php5: programowanie
Cytat
Wartości zmiennoprzecinkowe są tylko przybliżonymi przedstawieniami liczb. Na przykład 3,5 jest w wielu systemach przedstawione jako 3,4999999999. Oznacza to, że należy próbować uniknąć pisania kodu, który przyjmuje, że liczby zmiennoprzecinkowe są przedstawiane dokładnie, jak również unikać porównywania dwóch wartości zmiennoprzecinkowych przy użyciu znaku ==. Zazwyczaj stosuje się porównanie do kilkudziesięciu miejsc po przecinku:
if ( int($a * 1000) == int ($b * 1000 )){
#liczby równe do trzech miejsc po przecinku
}
Różne języki programowania różnie interpretują liczby zmiennoprzecinkowe. Dużo zależy od procesora twojej maszyny.
Możesz użyć rozszeżeń BCMath lub GMP