Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como o MySQL faz o cálculo matemático da adição de ponto flutuante?


Eu sei que o SQL 92 é o padrão antigo, mas tenho certeza que isso não é alterado nas versões mais recentes do padrão SQL.

SQL 92 define

A pergunta é:0.1 e 0.2 na consulta SELECT 0.1 + 0.2 aproximado ou é exato?
A resposta é:você não sabe também o banco de dados não pode saber.
Assim, o banco de dados executará a implementação definida para os mecanismos MySQL e MariaDB, que deve ser tratado como DECIMAL(1,1) tipos de dados

Por que a resposta de Nick retorna os valores corretos ou esperados com uma definição de tabela

O SQL 92 também define

O que Nick fez definindo o tipo de dados na tabela.

Editei esta resposta porque encontrei algo no manual do MySQL hoje.

A pergunta
SELECT (0.1 + 0.2) = 0.3

Resultados em 1 no MySQL, o que significa que o MySQL usa cálculo numérico exato e usa Matemática de precisão sempre que possível. Então o MySQL sabe que 0.1 , 0.2 e 0.3 são tipos de dados exatos aqui e precisam calcular exatamente, como eu esperava antes desta edição.

Significado da consulta
SELECT (0.1 + 0.2) = 0.3 

vai correr sob o capô mais ou menos como
SELECT CAST((0.1 + 0.2) AS DECIMAL(1, 1)) = CAST((0.3) AS DECIMAL(1, 1));