Questa è nota come precisione approssimativa . Questo non è un errore, virgola mobile
i tipi di dati sono destinati a funzionare in questo modo. Non possono memorizzare i dati con precisione. Quindi, se questo è importante, dovresti usare tipi di dati a virgola fissa, come DECIMAL
in MySQL.
D'altra parte, puoi sempre usare il delta di precisione per i confronti in virgola mobile, come:
SELECT
`foo`,
`bar`,
IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
t
come puoi vedere, qui delta è 1E-13
(normalmente sarà sufficiente)