Mysql
 sql >> база данни >  >> RDS >> Mysql

Как MySQL прави математическото изчисление на събирането с плаваща запетая?

Знам, че SQL 92 е стар стандарт, но съм почти сигурен, че това не е променено в по-новите стандартни версии на SQL.

SQL 92 дефинира

Въпросът е:0.1 и 0.2 в заявката SELECT 0.1 + 0.2 приблизително или точно?
Отговорът е:вие не знаете и базата данни не може да знае.
Така че базата данни ще изпълни внедряването, дефинирано за MySQL и MariaDB двигатели, което изглежда ще се обработва като DECIMAL(1,1) типове данни

Защо отговорът на Ник връща правилните стойности или очакваните с дефиниция на таблица

SQL 92 също дефинира

Което Ник направи, като дефинира типа данни в таблицата.

Редактирах този отговор, защото днес намерих нещо в ръководството на MySQL.

Заявката

SELECT (0.1 + 0.2) = 0.3

Резултати в 1 в MySQL, което означава, че MySQL използва точно числово изчисление и използва Прецизна математика където е възможно. Така че MySQL знае, че 0.1 , 0.2 и 0.3 са точни типове данни тук и трябва да изчисли точно, както очаквах преди тази редакция.

Имайки предвид заявката

SELECT (0.1 + 0.2) = 0.3 

ще работи под капака повече или по-малко като

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MONTHNAME() Примери – MySQL

  2. Какво всъщност означава max_connections?

  3. MySQL КАТО IN()?

  4. заявка за хоризонтално оформление на mysql данни

  5. Обща грешка:1005 Не мога да създам таблица с помощта на Laravel Schema Build и външни ключове