SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.05.2017 18:16:37

Roman
Участник
Зарегистрирован: 29.05.2017
Сообщений: 4

Помогите с Mysql, бред какой-то

Творится не пойми что

mysql> select `cottage`.`area`,`cottage`.`area`*1 from `cottage` where `cottage`.`id`=2828;
+------+--------------------+
| area | `cottage`.`area`*1 |
+------+--------------------+
|  7.8 |  7.800000190734863 |
+------+--------------------+

`cottage`.`area` имеет тип real

Неактивен

 

#2 29.05.2017 18:33:49

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Помогите с Mysql, бред какой-то

А какие данные лежат в таблице cottage? В частности, где id = 2828.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 29.05.2017 18:41:46

Roman
Участник
Зарегистрирован: 29.05.2017
Сообщений: 4

Re: Помогите с Mysql, бред какой-то

как понять какие, их много там, для каждого id. В данном поле, площадь участка

Неактивен

 

#4 29.05.2017 21:29:21

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Помогите с Mysql, бред какой-то

так и должно быть, потому что вы используете тип real (для чисел с плавающей точкой, хранит приблизительное значение)
если вам нужны точные значения используйте decimal

Неактивен

 

#5 30.05.2017 11:06:25

Roman
Участник
Зарегистрирован: 29.05.2017
Сообщений: 4

Re: Помогите с Mysql, бред какой-то

Спасибо... Только при decimal выводятся и нули после запятой

Неактивен

 

#6 30.05.2017 20:55:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Помогите с Mysql, бред какой-то

create table test (col decimal(5,2));

insert into test values(7.8);
insert into test values(9);
insert into test values(6.23);

MariaDB [test]> select col, @a:=truncate(col,1), @b:=truncate(col,0), if(col=@b,
@b,if(col=@a,@a,col)) `нужный вид` from test;
+------+---------------------+---------------------+------------+
| col  | @a:=truncate(col,1) | @b:=truncate(col,0) | нужный вид |
+------+---------------------+---------------------+------------+
| 7.80 |                 7.8 |                   7 | 7.8        |
| 9.00 |                 9.0 |                   9 | 9          |
| 6.23 |                 6.2 |                   6 | 6.23       |
+------+---------------------+---------------------+------------+
3 rows in set (0.00 sec)


P.S.В данном примере пришлось использовать переменные, иначе метод не работает. Кто знает с чем это связано?

Неактивен

 

#7 30.05.2017 21:25:50

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5828

Re: Помогите с Mysql, бред какой-то

Имхо, если не использовать в if переменные, то колонка получается типа decimal. Это заметно на следующем примере:

select col, truncate(col,1), if(col-truncate(col,1)<>0,22,truncate(col,1)) from test;
+------+-----------------+-----------------------------------------------+
| col  | truncate(col,1) | if(col-truncate(col,1)<>0,22,truncate(col,1)) |
+------+-----------------+-----------------------------------------------+
| 7.80 |             7.8 |                                           7.8 |
| 9.00 |             9.0 |                                           9.0 |
| 6.23 |             6.2 |                                          22.0 |
+------+-----------------+-----------------------------------------------+

Константа 22 отображается с дробной частью. Какое-то странное поведение похожее на багу. Почему тогда такой эффект не наблюдается в предыдущем примере, где для сравнения используются переменные?

Неактивен

 

#8 02.06.2017 11:18:08

Roman
Участник
Зарегистрирован: 29.05.2017
Сообщений: 4

Re: Помогите с Mysql, бред какой-то

спасибо

Неактивен

 

Board footer

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