Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment MySQL effectue-t-il le calcul mathématique de l'addition en virgule flottante ?

Je sais que SQL 92 est une ancienne norme, mais je suis presque sûr que cela n'a pas changé dans les nouvelles versions de la norme SQL.

SQL 92 définit

La question est :0.1 et 0.2 dans la requête SELECT 0.1 + 0.2 une approximation ou est-ce exact?
La réponse est :vous ne savez pas non plus que la base de données ne peut pas savoir.
Ainsi, la base de données exécutera l'implémentation définie pour les moteurs MySQL et MariaDB, cela semble être traité comme DECIMAL(1,1) types de données

Pourquoi la réponse de Nick renvoie-t-elle les valeurs correctes ou attendues avec une définition de table

SQL 92 définit également

Ce que Nick a fait en définissant le type de données dans la table.

Modifié cette réponse car j'ai trouvé quelque chose dans le manuel de MySQL aujourd'hui.

La requête

SELECT (0.1 + 0.2) = 0.3

Résultats en 1 dans MySQL, ce qui signifie que MySQL utilise le calcul numérique exact et utilise Mathématiques de précision si possible. Ainsi, MySQL sait que 0.1 , 0.2 et 0.3 sont des types de données exacts ici et doivent calculer exactement, comme je m'y attendais avant cette modification.

Signification de la requête

SELECT (0.1 + 0.2) = 0.3 

passera sous le capot plus ou moins comme

SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));