sql >> Database >  >> RDS >> Mysql

Hoe MySQL de wiskundige berekening van drijvende-kommatoevoeging uitvoert?

Ik weet dat SQL 92 een oude standaard is, maar ik ben er vrij zeker van dat dit niet is veranderd in de nieuwere SQL-standaardversies.

SQL 92 definieert

De vraag is:0.1 en 0.2 in de zoekopdracht SELECT 0.1 + 0.2 een benadering of is het exact?
Het antwoord is:jij weet het ook niet, de database kan het ook niet weten.
Dus de database zal de implementatie uitvoeren die is gedefinieerd voor MySQL- en MariaDB-engines. Dit lijkt te worden afgehandeld als DECIMAL(1,1) datatypes

Waarom retourneert Nicks antwoord de juiste of verwachte waarden met een tabeldefinitie

SQL 92 definieert ook

Wat Nick heeft gedaan door het datatype in de tabel te definiëren.

Dit antwoord bewerkt omdat ik vandaag iets in de MySQL-handleiding heb gevonden.

De vraag

SELECT (0.1 + 0.2) = 0.3

Resultaten in 1 in MySQL, wat betekent dat MySQL exacte numerieke berekening gebruikt en gebruikt Precisie wiskunde waar mogelijk. Dus de MySQL weet dat 0.1 , 0.2 en 0.3 zijn hier exacte datatypes en moeten exact worden berekend, zoals ik voor deze bewerking had verwacht.

Betekenis van de vraag

SELECT (0.1 + 0.2) = 0.3 

zal min of meer onder de motorkap lopen zoals

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


  1. MySQL LIKE vs LOCATE

  2. Mikro-orm-fout:wachtwoordverificatie mislukt voor gebruiker postgres

  3. UITZONDERING:Niet-ondersteunde bewerking:RawSocket-constructor (Dart met sqljocky5:^2.2.1)

  4. Een voortschrijdend gemiddelde MySQL berekenen?