sql >> Databáze >  >> RDS >> Mysql

Jak MySQL provádí matematický výpočet sčítání s plovoucí desetinnou čárkou?

Vím, že SQL 92 je starý standard, ale jsem si jistý, že se to v novějších standardních verzích SQL nezměnilo.

SQL 92 definuje

Otázka zní:0.1 a 0.2 v dotazu SELECT 0.1 + 0.2 přibližné nebo je to přesné?
Odpověď zní:nevíte, ani databáze nemůže vědět.
Databáze tedy poběží implementaci definovanou pro motory MySQL a MariaDB, která se zdá být zpracována jako DECIMAL(1,1) datové typy

Proč Nickova odpověď vrací správné hodnoty nebo očekávané hodnoty s definicí tabulky

SQL 92 také definuje

Což Nick udělal definováním datového typu v tabulce.

Upravil jsem tuto odpověď, protože jsem dnes něco našel v příručce MySQL.

Dotaz

SELECT (0.1 + 0.2) = 0.3

Výsledky do 1 v MySQL, což znamená, že MySQL používá přesné numerické výpočty a používá Přesná matematika kde je to možné. Takže MySQL ví, že 0.1 , 0.2 a 0.3 jsou zde přesné datové typy a je třeba je přesně vypočítat, jak jsem před touto úpravou očekával.

Význam dotazu

SELECT (0.1 + 0.2) = 0.3 

poběží pod kapotou víceméně jako

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


  1. Entity Framework:K tomuto příkazu je již přidružen otevřený DataReader

  2. WhoIsActive Runner

  3. Chyba dotazování KGXGN (15)

  4. SQLSTATE[22007]:Neplatný formát data a času:1292 Nesprávná hodnota data a času:'2008-03-30 02:56:12'