Ошибка при сложении в SQL-запрос чисел с плавающей точкой - MySQL

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!!! Делал программу-клиент для БД и наткнулся на проблему. Проблема заключается в том что при сложении столбцов (тип данных в столбцах: число с плавающей точкой) получается число у которого не хватает единицы в 15 степени. Но эта беда распространяется не на всё, а только при сложении этих двух чисел - 100.0+212.665. SQL-запрос возвращает - 312.664999.... Остальное считает нормально. Пробовал эти числа сложить в Excel и Libre - точно такая же беда. Главное если вместо точки использовать запятую, то считает нормально, но SQL кажется не понимает числа с запятой как тип REAL. Может кто посоветует что делать и что это вообще такое. Запрос который я делаю в БД:
SELECT RAW, EDIZM, SKLAD+MIN_VODA+VAROCHN+BEZ_ALCA+ROZLIV+KEGI , SKLAD, MIN_VODA, VAROCHN, BEZ_ALCA, ROZLIV, KEGI FROM PLAN_STAT ORDER BY RAW ASC
пробовал менять структуру таблицы - не помогло.
CREATE TABLE IF NOT EXISTS `PLAN_STAT` (
  `RAW_ID` INT(11) NOT NULL AUTO_INCREMENT,
  `RAW` VARCHAR(200) NOT NULL,
  `EDIZM` VARCHAR(20) NOT NULL,
  `SKLAD` FLOAT NOT NULL,
  `MIN_VODA` FLOAT NOT NULL,
  `VAROCHN` FLOAT NOT NULL,
  `BEZ_ALCA` FLOAT NOT NULL,
  `ROZLIV` FLOAT NOT NULL,
  `KEGI` FLOAT NOT NULL,
  `TEST` FLOAT NOT NULL,
  PRIMARY KEY (`RAW_ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=195 ;
потом сделал такую:
CREATE TABLE IF NOT EXISTS `PLAN_STAT` (
  `RAW_ID` INT(11) NOT NULL AUTO_INCREMENT,
  `RAW` VARCHAR(200) NOT NULL,
  `EDIZM` VARCHAR(20) NOT NULL,
  `SKLAD` DOUBLE NOT NULL,
  `MIN_VODA` DOUBLE NOT NULL,
  `VAROCHN` DOUBLE NOT NULL,
  `BEZ_ALCA` DOUBLE NOT NULL,
  `ROZLIV` DOUBLE NOT NULL,
  `KEGI` DOUBLE NOT NULL,
  `TEST` DOUBLE NOT NULL,
  PRIMARY KEY (`RAW_ID`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=195 ;

Решение задачи: «Ошибка при сложении в SQL-запрос чисел с плавающей точкой»

textual
Листинг программы
CREATE TABLE IF NOT EXISTS test_tab (
 num1  NUMERIC(20,6),
 num2  NUMERIC(20,6)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=195;
 
INSERT INTO test_tab VALUES(100.0,212.665);
 
SELECT num1,num2, num1+num2 FROM test_tab;

Объяснение кода листинга программы

  1. Создание таблицы test_tab с двумя полями num1 и num2 типа NUMERIC(20,6)
  2. Установка значения AUTO_INCREMENT для поля num1 равным 195
  3. Вставка значения (100.0,212.665) в таблицу test_tab
  4. Выборка из таблицы test_tab полей num1, num2 и их суммы num1+num2

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы