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

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

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

Здравствуйте!!! Делал программу-клиент для БД и наткнулся на проблему. Проблема заключается в том что при сложении столбцов (тип данных в столбцах: число с плавающей точкой) получается число у которого не хватает единицы в 15 степени. Но эта беда распространяется не на всё, а только при сложении этих двух чисел - 100.0+212.665. SQL-запрос возвращает - 312.664999.... Остальное считает нормально. Пробовал эти числа сложить в Excel и Libre - точно такая же беда. Главное если вместо точки использовать запятую, то считает нормально, но SQL кажется не понимает числа с запятой как тип REAL. Может кто посоветует что делать и что это вообще такое. Запрос который я делаю в БД:
Листинг программы
  1. 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
пробовал менять структуру таблицы - не помогло.
Листинг программы
  1. CREATE TABLE IF NOT EXISTS `PLAN_STAT` (
  2. `RAW_ID` INT(11) NOT NULL AUTO_INCREMENT,
  3. `RAW` VARCHAR(200) NOT NULL,
  4. `EDIZM` VARCHAR(20) NOT NULL,
  5. `SKLAD` FLOAT NOT NULL,
  6. `MIN_VODA` FLOAT NOT NULL,
  7. `VAROCHN` FLOAT NOT NULL,
  8. `BEZ_ALCA` FLOAT NOT NULL,
  9. `ROZLIV` FLOAT NOT NULL,
  10. `KEGI` FLOAT NOT NULL,
  11. `TEST` FLOAT NOT NULL,
  12. PRIMARY KEY (`RAW_ID`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=195 ;
потом сделал такую:
Листинг программы
  1. CREATE TABLE IF NOT EXISTS `PLAN_STAT` (
  2. `RAW_ID` INT(11) NOT NULL AUTO_INCREMENT,
  3. `RAW` VARCHAR(200) NOT NULL,
  4. `EDIZM` VARCHAR(20) NOT NULL,
  5. `SKLAD` DOUBLE NOT NULL,
  6. `MIN_VODA` DOUBLE NOT NULL,
  7. `VAROCHN` DOUBLE NOT NULL,
  8. `BEZ_ALCA` DOUBLE NOT NULL,
  9. `ROZLIV` DOUBLE NOT NULL,
  10. `KEGI` DOUBLE NOT NULL,
  11. `TEST` DOUBLE NOT NULL,
  12. PRIMARY KEY (`RAW_ID`)
  13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=195 ;

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

textual
Листинг программы
  1. CREATE TABLE IF NOT EXISTS test_tab (
  2.  num1  NUMERIC(20,6),
  3.  num2  NUMERIC(20,6)
  4. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=195;
  5.  
  6. INSERT INTO test_tab VALUES(100.0,212.665);
  7.  
  8. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы