Това е известно като приблизителна прецизност . Това не е грешка, с плаваща запетая
типовете данни са предназначени да работят по този начин. Те не могат да съхраняват данни точно. Така че, ако това има значение, трябва да използвате типове данни с фиксирана точка, като DECIMAL
в MySQL.
От друга страна, винаги можете да използвате прецизна делта за сравнения за плаваща запетая, като:
SELECT
`foo`,
`bar`,
IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
t
както можете да видите, тук делтата е 1E-13
(обикновено това ще бъде достатъчно)