Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Дробные числа! / 21 сообщений из 21, страница 1 из 1
12.06.2018, 22:57
    #39659892
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
Всем привет, недавно начал изучать mysql, столкнулся с проблемой - при выводе таблицы дробные числа отображаются как целые, делал вроде все правильно, рылся в инете, так и не смог понять. Помогите пожалуйста.


create database cookie;
use cookie

create table cookie_sales
(
ID int not null auto_increment,
first_name varchar(20) default null,
sales dec(4.2) default null,
sale_date DATE,
primary key(ID)
);

insert into cookie_sales
(first_name, sales, sale_date)
values
('Линдси',32.02, '2007-3-6'),('Пэрис',26.53, '2007-3-6'),
('Бритни',11.25, '2007-3-6'),('Николь',18.96, '2007-3-6'),
('Линдси',9.16, '2007-3-7'),('Пэрис',1.52, '2007-3-7'),
('Бритни',43.21, '2007-3-7'),('Николь',8.05, '2007-3-7'),
('Линдси',17.62, '2007-3-8'),('Пэрис',24.19, '2007-3-8'),
('Бритни',3.40, '2007-3-8'),('Николь',15.21, '2007-3-8'),
('Линдси',0, '2007-3-9'),('Пэрис',31.99, '2007-3-9'),
('Бритни',2.58, '2007-3-9'),('Николь',0, '2007-3-9'),
('Линдси',2.34, '2007-3-10'),('Пэрис',13.44, '2007-3-10'),
('Бритни',8.78, '2007-3-10'),('Николь',26.82, '2007-3-10'),
('Линдси',3.71, '2007-3-11'),('Пэрис',0.56, '2007-3-11'),
('Бритни',34.19, '2007-3-11'),('Николь',7.77, '2007-3-11'),
('Линдси',16.23, '2007-3-12'),('Пэрис',0, '2007-3-12'),
('Бритни',4.50, '2007-3-12'),('Николь',19.22, '2007-3-12');
...
Рейтинг: 0 / 0
12.06.2018, 23:01
    #39659895
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
да еще и округляет, заметил после публикации сообщения!
...
Рейтинг: 0 / 0
12.06.2018, 23:12
    #39659898
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
dermama,

посмотрите в show create table на свою табличку.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
mysql> create temporary table foo (val dec(4.2));
Query OK, 0 rows affected (0.04 sec)

mysql> show create table foo;
+-------+---------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                            |
+-------+---------------------------------------------------------------------------------------------------------+
| foo   | CREATE TEMPORARY TABLE `foo` (
  `val` decimal(4,0) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> 



Хотя если это пример из какой-то книги, то наверное просто не видно. dec(4.2) и dec(4,2) - две очень большие разницы.
И да, это странный mysql, который пытается поломать добавляемые данные вместо сообщения об ошибке. Поэтому я аже не удивлён, что нет даже варнинга от попытки объвить decimal с дробным числом целых.
...
Рейтинг: 0 / 0
12.06.2018, 23:29
    #39659900
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
я перебирал разные варианты и подумал может быть стоит изменить dec на decimal хотя это одно и тоже, да это пример из книги, скорее всего косяк в запятой от невнимательности, сейчас проверю.

alter table cookie_sales
change column sales sales decimal (4.2);

опять же тут точка, вопрос, почему тогда mysql это пропускает, ща переделаю.
...
Рейтинг: 0 / 0
12.06.2018, 23:32
    #39659902
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
заменил на запятую, но особо не помогло)))
...
Рейтинг: 0 / 0
12.06.2018, 23:35
    #39659903
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
это я пытался скопировать таблицу из книги, чтобы задания поделать, исходного кода там нет, поэтому я сам все делал
...
Рейтинг: 0 / 0
12.06.2018, 23:44
    #39659905
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
Кстати пробовал менять на DOUBLE - та же история , просто целые числа.
...
Рейтинг: 0 / 0
12.06.2018, 23:46
    #39659906
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
Melkij,

у меня немного по-другому показывает
...
Рейтинг: 0 / 0
13.06.2018, 01:31
    #39659928
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
с чего оно поможет то, если вы просто alter table колонке сделали
значения как были целыми, так и остались
дропайте таблицу
...
Рейтинг: 0 / 0
13.06.2018, 04:08
    #39659941
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
это изменит тип значений после ALTER
Код: sql
1.
UPDATE cookie_sales SET sales=sales
...
Рейтинг: 0 / 0
13.06.2018, 20:52
    #39660503
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
tip78с чего оно поможет то, если вы просто alter table колонке сделали
значения как были целыми, так и остались
дропайте таблицу



Дропнул таблицу, все помогло, большое спасибо
Но почему когда я менял запятую в команде alter table с помощью метода change, при повторном возврате таблицы числа остались целыми? метод change для того и создан был чтобы менять тип данных, а вы говорите, что я просто alter table сделал, я сделал его как раз для того чтобы изменить их) но старнно, они же ведь и были не целыми так как я ставил DEC с плавающей точкой, да еще и точку в скобках сам mysql пропустил...спасибо зза внимание
...
Рейтинг: 0 / 0
13.06.2018, 20:55
    #39660504
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
dermamatip78с чего оно поможет то, если вы просто alter table колонке сделали
значения как были целыми, так и остались
дропайте таблицу



Дропнул таблицу, все помогло, большое спасибо
Но почему когда я менял запятую в команде alter table с помощью метода change, при повторном возврате таблицы числа остались целыми? метод change для того и создан был чтобы менять тип данных, а вы говорите, что я просто alter table сделал, я сделал его как раз для того чтобы изменить их) но старнно, они же ведь и были не целыми так как я ставил DEC с плавающей точкой, да еще и точку в скобках сам mysql пропустил...спасибо зза внимание



все понял, с помощью change меняют тип данныз например с int на dec и т.д. а я же поменял только точку на запятую... Выходит если бы я так накосячил на таблице с 10к строками и в этих строках не было бы ни одного значения с плав. точкой, а потом на 10001ой я решил бы его добавить и понял что не могу этого сдлелать, то все, таблице кирдык??????
...
Рейтинг: 0 / 0
13.06.2018, 23:34
    #39660541
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
у вас в колонке были ЦЕЛЫЕ числа, поскольку вы её создали для ЦЕЛЫХ чисел
dec(4.2) - це ЦЕЛОЕ, а dec(4,2) - це дробное
и после того как вы его переделали в дробное через alter table, оно лишь получило .00, т.к. у этого числа никогда не было дробной части и оно понятия не имеет, какие там цифры
...
Рейтинг: 0 / 0
13.06.2018, 23:36
    #39660543
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
и есессно, если вы дробную колонку переделаете на целое, дробную часть потеряется навсегда
...
Рейтинг: 0 / 0
13.06.2018, 23:49
    #39660545
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
tip78у вас в колонке были ЦЕЛЫЕ числа, поскольку вы её создали для ЦЕЛЫХ чисел
dec(4.2) - це ЦЕЛОЕ, а dec(4,2) - це дробное
и после того как вы его переделали в дробное через alter table, оно лишь получило .00, т.к. у этого числа никогда не было дробной части и оно понятия не имеет, какие там цифры

Сейас запутался немного, в книге не помню чтобы так объясняли, то есть как я понимаю если я ставлю тип DEC, то в моем понимании я уже говорю муsql , что в этой колонке будут целые числа с плавающей точкой, но только в том случае, если я укажу ',' в скобках, а если я в скобках указываю '.', то язык воспринимает числа как int что ли???? блин, тогда почему бы ему не написать Error или что то типа того))))
...
Рейтинг: 0 / 0
13.06.2018, 23:55
    #39660547
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
.00, т.к. у этого числа никогда не было дробной части и оно понятия не имеет, какие там цифры[/quot]


тоже не совсем понимаю, я же в insert into четко указал, что у меня там дробные числа.....почему после замены на запятую, он не берет те значения, котрые я вносил в insert into??
...
Рейтинг: 0 / 0
14.06.2018, 00:04
    #39660548
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
dermamaтоже не совсем понимаю, я же в insert into четко указал, что у меня там дробные числа.....почему после замены на запятую, он не берет те значения, котрые я вносил в insert into??А покажите полный и точный текст вашего INSERT-а.
...
Рейтинг: 0 / 0
14.06.2018, 00:10
    #39660549
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
miksoftdermamaтоже не совсем понимаю, я же в insert into четко указал, что у меня там дробные числа.....почему после замены на запятую, он не берет те значения, котрые я вносил в insert into??А покажите полный и точный текст вашего INSERT-а.


Да, конечно,


insert into cookie_sales
(first_name, sales, sale_date)
values
('Линдси',32.02, '2007-3-6'),('Пэрис',26.53, '2007-3-6'),
('Бритни',11.25, '2007-3-6'),('Николь',18.96, '2007-3-6'),
('Линдси',9.16, '2007-3-7'),('Пэрис',1.52, '2007-3-7'),
('Бритни',43.21, '2007-3-7'),('Николь',8.05, '2007-3-7'),
('Линдси',17.62, '2007-3-8'),('Пэрис',24.19, '2007-3-8'),
('Бритни',3.40, '2007-3-8'),('Николь',15.21, '2007-3-8'),
('Линдси',0, '2007-3-9'),('Пэрис',31.99, '2007-3-9'),
('Бритни',2.58, '2007-3-9'),('Николь',0, '2007-3-9'),
('Линдси',2.34, '2007-3-10'),('Пэрис',13.44, '2007-3-10'),
('Бритни',8.78, '2007-3-10'),('Николь',26.82, '2007-3-10'),
('Линдси',3.71, '2007-3-11'),('Пэрис',0.56, '2007-3-11'),
('Бритни',34.19, '2007-3-11'),('Николь',7.77, '2007-3-11'),
('Линдси',16.23, '2007-3-12'),('Пэрис',0, '2007-3-12'),
('Бритни',4.50, '2007-3-12'),('Николь',19.22, '2007-3-12');
...
Рейтинг: 0 / 0
14.06.2018, 00:12
    #39660550
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
вот теперь после select * from
...
Рейтинг: 0 / 0
14.06.2018, 13:55
    #39660765
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
dermamaя же в insert into четко указал, что у меня там дробные числа.....почему после замены на запятую, он не берет те значения, котрые я вносил в insert into??
Если ты положил в холодильник половину слона, поскольку целый туда не влез, будешь ты ожидать достать из него целого слона после расширения дверки?..
...
Рейтинг: 0 / 0
14.06.2018, 14:47
    #39660805
tip78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Дробные числа!
dermamaСейас запутался немного, в книге не помню чтобы так объясняли, то есть как я понимаю если я ставлю тип DEC, то в моем понимании я уже говорю муsql , что в этой колонке будут целые числа с плавающей точкой, но только в том случае, если я укажу ',' в скобках, а если я в скобках указываю '.', то язык воспринимает числа как int что ли???? блин, тогда почему бы ему не написать Error или что то типа того))))

авторMySQL, будучи недостаточно строгой СУБД, задорно игнорирует ваши настройки и ограничения целостности (она просто хочет помочь);
она легко вставит пустую строку "" в колонку с запретом на добавление пустых значений;
она с радостью вставит бесполезные даты (вроде 0000-00-00) в колонки с датами при запрете добавления пустых значений;
она умеет делить на ноль и вернёт NULL при вычислении 1/0;
она вернёт NULL при делении строки на ноль;
если вы попробуете вставить значение 1000 в колонку с длиной равной двум, то она просто немного округлит это значение до 99.

Всё это должно дать вам повод задуматься об использовании MySQL: эта система не проверяет ваши данные, зато она пытается показаться «удобной» ценой целостности данных.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Дробные числа! / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]