sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo hace MySQL el cálculo matemático de la suma de punto flotante?

Sé que SQL 92 es un estándar antiguo, pero estoy bastante seguro de que esto no cambia en las versiones más nuevas del estándar SQL.

SQL 92 define

La pregunta es:0.1 y 0.2 en la consulta SELECT 0.1 + 0.2 un aproximado o es exacto?
La respuesta es:usted no sabe, tampoco la base de datos puede saberlo.
Entonces, la base de datos ejecutará la implementación definida para los motores MySQL y MariaDB, esto parece ser manejado como DECIMAL(1,1) tipos de datos

¿Por qué la respuesta de Nick devuelve los valores correctos o esperados con una definición de tabla?

SQL 92 también define

Lo que Nick ha hecho al definir el tipo de datos en la tabla.

Edité esta respuesta porque hoy encontré algo en el manual de MySQL.

La consulta

SELECT (0.1 + 0.2) = 0.3

Resultados en 1 en MySQL, lo que significa que MySQL usa un cálculo numérico exacto y usa Matemáticas de precisión donde sea posible. Así que MySQL sabe que 0.1 , 0.2 y 0.3 son tipos de datos exactos aquí y necesita calcular exactamente, como esperaba antes de esta edición.

Significado de la consulta

SELECT (0.1 + 0.2) = 0.3 

correrá bajo el capó más o menos como

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