sql >> Databasteknik >  >> RDS >> Mysql

Subtraktion av två lika värden är inte noll i mysql

Det är känt som en ungefärlig precision . Detta är inte ett fel, flytande punkt datatyper är avsedda att fungera på detta sätt. De kan inte lagra data exakt. Så om det spelar någon roll bör du använda datatyper med fast punkt, som DECIMAL i MySQL.

Å andra sidan kan du alltid använda precisionsdelta för jämförelser för flyttal, som:

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

som du kan se är delta här 1E-13 (normalt räcker det)



  1. Ändringar av en skrivbar partition kan misslyckas oväntat

  2. Komma igång med SQLite Full-text Search

  3. Ändra eller ställ in MySQL Long Query Time Value för log-slow-queries

  4. Hur man returnerar frågeresultat som en kommaseparerad lista i SQL Server – STRING_AGG()