SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 12.10.2011 17:36:16

vladkor
Участник
Зарегистрирован: 11.10.2011
Сообщений: 6

Значение поля (float) -0. Что делать?

Всем доброго! Спрашивал в разделе для начинающих - по сути никто не ответил.
MySQL 5.1.53-MariaDB, ОС Linux
Собственно вопрос по арифметике: если поле float умножить на -1, то для нулевых значений получаем -0.
Проверено на версиях 5.1.30, 5.0.51a - та же песня...
Проблема в том, что select ... where qty<0 такие записи не находит (равно как и where qty=-0).
Спасибо.

Неактивен

 

#2 12.10.2011 18:11:53

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение поля (float) -0. Что делать?

у меня where qty=-0 их находит, mysql 5.0.45

mysql> create table x (a float);
mysql> insert into x values (0);
mysql> insert into x values (0);
mysql> insert into x values (0);
mysql> update x set a=-a limit 1;
mysql> select * from x;
+------+
| a    |
+------+
|   -0 |
|    0 |
|    0 |
+------+
mysql> select * from x where a=-0;
+------+
| a    |
+------+
|   -0 |
|    0 |
|    0 |
+------+
 

Неактивен

 

#3 12.10.2011 18:34:11

vladkor
Участник
Зарегистрирован: 11.10.2011
Сообщений: 6

Re: Значение поля (float) -0. Что делать?

Нет, не находит! В Вашем примере результат - все записи как с 0, так и с -0.
Задача отыскать записи с qty=-0
Я понимаю, что вопрос в чем-то надуманный - сделать update ... set qty=0 where qty=0 по всем записям и всех дел, но сам факт значения поля -0 как-то настораживает.

Отредактированно vladkor (12.10.2011 18:49:09)

Неактивен

 

#4 12.10.2011 19:17:14

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение поля (float) -0. Что делать?

select * from x where concat(a,'')='-0';

Неактивен

 

#5 12.10.2011 19:31:23

vladkor
Участник
Зарегистрирован: 11.10.2011
Сообщений: 6

Re: Значение поля (float) -0. Что делать?

Спасибо, понятно. Однако (с точки зрения арифметики) значение -0 все же напрягает.

Неактивен

 

#6 12.10.2011 19:56:06

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение поля (float) -0. Что делать?

Для float есть два представления нуля. Это свойство представления чисел с плавающей точкой в x86 http://en.wikipedia.org/wiki/Floating_point#Signed_zero

Неактивен

 

#7 12.10.2011 20:28:35

vladkor
Участник
Зарегистрирован: 11.10.2011
Сообщений: 6

Re: Значение поля (float) -0. Что делать?

Еще раз спасибо. Получил новые знания. История такая - в некоторых приложениях при многопользовательской работе с БД использую умножение кол-ва на -1 для блокировки неких действий других пользователей (с последующим возвратом в исходное состояние *-1). Все работает уже много лет, но недавно напоролся на этот самый -0. Впредь буду аккуратнее.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson