Главная > MySQL > mysql больше меньше float

mysql больше меньше float

Проблема при запросе с WHERE field>"143.6" или field<"143.6" т.е. больше или меньше указанного значения (но не равно) получаем также строку где значение поля равно 143.6.
Используемый тип данных: FLOAT
Решением может быть следующее: прибавить или вычесть пренебрежительно малую величину после чего сравнивать.

if ($pos=='>') {
	$item[$so]=$item[$so]+0.001;
}
if ($pos=='<') {
	$item[$so]=$item[$so]-0.001;
}

После чего запрос будет выглядеть: field>"143.601" или field<"143.599".

http://forum.php.su/topic.php?forum=78&topic=4277

Известная проблема типа данных с плавающей точкой - неточное представление данных может порождать вот такие явления при сравнении. Для сравнения введите некоторую дельту, которая будет считаться пренебрежительно малой для Ваших вычисление. Например, $delta = 1E-15 - и сравнивайте по ней:
SELECT * FROM `table` WHERE `data`>567.5 + $delta

Или использовать тип данный, например, DECIMAL, если это возможно.

http://softtime.ru/forum/read.php?id_forum=3&id_theme=81227&page=1

FLOAT занимает один байт и представляет числа от -3.402823466E+38 до -1.175494351E-38, DOUBLE занимает два байта и представляет числа от -1.7976931348623157E+308 to -2.2250738585072014E-308 (т.е. диапазон почти на 10 порядков больше). Но это обычные приближенные числа, т.е. при вычислениях будет накапливаться ошибка вычисления, так как числа представлены моделью. Если нужно, чтобы дробное число было точным, то его хранят не в виде модели, а строке DECIMAL - операции с такими числами проходят медленнее, зато ничего не теряется и не накапливается лишнего, что например, при работе с деньгами очень важно - пусть хоть пол часа вычисляется, но зато точно.

Categories: MySQL Tags:
  1. Пока что нет комментариев.
Похожие публикации