Mysql
 sql >> Database >  >> RDS >> Mysql

La sottrazione di due valori uguali non è zero in MySQL

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)