Ошибка при сложении в 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;
Объяснение кода листинга программы
- Создание таблицы
test_tab
с двумя полямиnum1
иnum2
типа NUMERIC(20,6) - Установка значения AUTO_INCREMENT для поля
num1
равным 195 - Вставка значения (100.0,212.665) в таблицу
test_tab
- Выборка из таблицы
test_tab
полейnum1
,num2
и их суммыnum1+num2
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д