sql >> Base de Datos >  >> RDS >> Mysql

La resta de dos valores iguales no es cero en mysql

Eso se conoce como una precisión aproximada. . Esto no es un error, punto flotante los tipos de datos están destinados a funcionar de esa manera. No pueden almacenar datos con precisión. Entonces, si eso importa, debe usar tipos de datos de punto fijo, como DECIMAL en MySQL.

Por otro lado, siempre puede usar precisión delta para comparaciones de punto flotante, como:

SELECT 
  `foo`,
  `bar`,
  IF(ABS(`foo`-`bar`)<1E-13, 0, `foo`-`bar`) AS zero_compared
FROM
 t

como puede ver, aquí delta es 1E-13 (normalmente, eso será suficiente)