So che SQL 92 è vecchio standard, ma sono abbastanza sicuro che questo non sia cambiato nelle versioni più recenti dello standard SQL.
SQL 92 definisce
La domanda è:0.1
e 0.2
nella query SELECT 0.1 + 0.2
un approssimativo o è esatto?
La risposta è:tu non lo sai anche il database non può saperlo.
Quindi il database eseguirà l'implementazione definita per i motori MySQL e MariaDB, questo sembra essere gestito come DECIMAL(1,1)
tipi di dati
Perché la risposta di Nick restituisce i valori corretti o quelli previsti con una definizione di tabella
SQL 92 definisce anche
Che Nick ha fatto definendo il tipo di dati nella tabella.
Ho modificato questa risposta perché oggi ho trovato qualcosa nel manuale di MySQL.
La domanda
SELECT (0.1 + 0.2) = 0.3
Risulta in 1
in MySQL, il che significa che MySQL utilizza il calcolo numerico esatto e utilizza Matematica di precisione
dove possibile. Quindi MySQL sa che 0.1
, 0.2
e 0.3
sono tipi di dati esatti qui e devono essere calcolati esattamente, come mi aspettavo prima di questa modifica.
Significato la query
SELECT (0.1 + 0.2) = 0.3
correrà sotto il cofano più o meno come
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));