Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie führt MySQL die mathematische Berechnung der Gleitkommaaddition durch?

Ich weiß, dass SQL 92 ein alter Standard ist, aber ich bin mir ziemlich sicher, dass dies in den neueren SQL-Standardversionen nicht geändert wird.

SQL 92 definiert

Die Frage lautet:0.1 und 0.2 in der Abfrage SELECT 0.1 + 0.2 ungefähr oder genau?
Die Antwort lautet:Sie wissen es nicht, auch die Datenbank kann es nicht wissen.
Die Datenbank wird also die Implementierung ausführen, die für MySQL- und MariaDB-Engines definiert ist. Dies scheint als DECIMAL(1,1) behandelt zu werden Datentypen

Warum gibt Nicks Antwort die richtigen oder erwarteten Werte mit einer Tabellendefinition zurück

SQL 92 definiert auch

Was Nick getan hat, indem er den Datentyp in der Tabelle definiert hat.

Diese Antwort wurde bearbeitet, weil ich heute etwas im MySQL-Handbuch gefunden habe.

Die Abfrage

SELECT (0.1 + 0.2) = 0.3

Ergibt 1 in MySQL, was bedeutet, dass MySQL eine exakte numerische Berechnung verwendet und verwendet Präzisionsmathematik wo möglich. MySQL kennt also 0.1 , 0.2 und 0.3 sind hier genaue Datentypen und müssen genau berechnet werden, wie ich es vor dieser Bearbeitung erwartet hatte.

Gemeint ist die Abfrage

SELECT (0.1 + 0.2) = 0.3 

wird mehr oder weniger wie

unter der Haube laufen
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));