Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Odejmowanie dwóch równych wartości nie jest zerem w mysql

Jest to znane jako przybliżona precyzja . To nie jest błąd, zmiennoprzecinkowy typy danych mają działać w ten sposób. Nie mogą precyzyjnie przechowywać danych. Więc jeśli ma to znaczenie, powinieneś użyć typów danych stałoprzecinkowych, takich jak DECIMAL w MySQL.

Z drugiej strony, zawsze możesz użyć delty dokładności do porównań zmiennoprzecinkowych, takich jak:

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

jak widać, tutaj delta to 1E-13 (zwykle to wystarczy)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura składowana MySQL a funkcja, której powinienem użyć, kiedy?

  2. JPA i Hibernate inicjują nie leniwe kolekcje Błąd

  3. Sailsjs Mysql ORM wielokrotne zapytania w tym samym polu tabeli

  4. Odmowa dostępu do MySQL z powodu błędu użytkownika?

  5. Jak ograniczyć wiersze w zestawie wyników MySQL