Jest to znane jako przybliżona precyzja . To nie jest błąd, zmiennoprzecinkowy
typy danych mają działać w ten sposób. Nie mogą precyzyjnie przechowywać danych. Więc jeśli ma to znaczenie, powinieneś użyć typów danych stałoprzecinkowych, takich jak DECIMAL
w MySQL.
Z drugiej strony, zawsze możesz użyć delty dokładności do porównań zmiennoprzecinkowych, takich jak:
SELECT
`foo`,
`bar`,
IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
t
jak widać, tutaj delta to 1E-13
(zwykle to wystarczy)