Isso é conhecido como uma precisão aproximada . Isso não é um erro, ponto flutuante tipos de dados se destinam a funcionar dessa maneira. Eles não podem armazenar dados com precisão. Portanto, se isso importa, você deve usar tipos de dados de ponto fixo, como
DECIMAL
em MySQL. Por outro lado, você sempre pode usar delta de precisão para comparações de ponto flutuante, como:
SELECT
`foo`,
`bar`,
IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
t
como você pode ver, aqui o delta é
1E-13
(normalmente, isso será suficiente)