Ik weet dat SQL 92 een oude standaard is, maar ik ben er vrij zeker van dat dit niet is veranderd in de nieuwere SQL-standaardversies.
SQL 92 definieert
De vraag is:0.1
en 0.2
in de zoekopdracht SELECT 0.1 + 0.2
een benadering of is het exact?
Het antwoord is:jij weet het ook niet, de database kan het ook niet weten.
Dus de database zal de implementatie uitvoeren die is gedefinieerd voor MySQL- en MariaDB-engines. Dit lijkt te worden afgehandeld als DECIMAL(1,1)
datatypes
Waarom retourneert Nicks antwoord de juiste of verwachte waarden met een tabeldefinitie
SQL 92 definieert ook
Wat Nick heeft gedaan door het datatype in de tabel te definiëren.
Dit antwoord bewerkt omdat ik vandaag iets in de MySQL-handleiding heb gevonden.
De vraag
SELECT (0.1 + 0.2) = 0.3
Resultaten in 1
in MySQL, wat betekent dat MySQL exacte numerieke berekening gebruikt en gebruikt Precisie wiskunde
waar mogelijk. Dus de MySQL weet dat 0.1
, 0.2
en 0.3
zijn hier exacte datatypes en moeten exact worden berekend, zoals ik voor deze bewerking had verwacht.
Betekenis van de vraag
SELECT (0.1 + 0.2) = 0.3
zal min of meer onder de motorkap lopen zoals
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));