Mysql
 sql >> Database >  >> RDS >> Mysql

In che modo MySQL esegue il calcolo matematico dell'addizione in virgola mobile?

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));