|
|
|
| Есть таблица, в которой находятся поля: id_product (PK), id_category (FK), name (tinytext), ccal, protein, carbon, fat. Последние четыре поля имеют тип float (4,2).
Добавляю запись:
insert into products ( id_product, id_category, name, ccal, protein, carbon, fat) values ( 0, 5, 'Банан', 90.9, 1.5, 21, 0.1,);
Получаю результат:
2 | 5 | Банан | 90,90 | 1,5 | 9,99 | 0,10
Как можете видеть, цифры для поля carbon совсем не те, что я добавлял.
Изменил тип на Decimal - все то же самое.
Вопрос: какой же тип следует использовать в данном случае, если вводимые данные (цифры) могут содержать десятичные знаки, а могут и не содержать?
Или следует обязательно вводить данные в поля с таким типом по шаблону (то есть с разделителем)?
В книге уважаемого cheops-а не нашел ответ, равно как и в сети...
Спасибо.
Спасибо. | |
|
|
|
|
|
|
|
для: baston
(10.04.2010 в 15:32)
| | Нашел! Тип Double. В этом случае данные добавляются в точности так, как их вводишь. | |
|
|
|
|
|
|
|
для: baston
(10.04.2010 в 15:32)
| | >Получаю результат:
>2 | 5 | Банан | 90,90 | 1,5 | 9,99 | 0,10
>Как можете видеть, цифры для поля carbon совсем не те, что я добавлял.
В полях числа лежат, а не цифры. Числа не содержат десятичных или еще каких знаков. Число - это число, математическая величина, а не её текстовое представление.
Числа те же.
А чем Вы получаете результат?
Может быть клиент просто форматирует вывод согласно своим представлениям (или представлениям текущей локали)? | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2010 в 19:31)
| | Нет, я ничего пока не делаю с данными. Никаких запросов. Просто вижу, что отображается в клиенте HeidiSQL после добавления записи. И вижу, что вводимые числа отличаются от отображаемых (вместо числа 21 отображается число 9,99). | |
|
|
|
|
|
|
|
для: baston
(10.04.2010 в 21:55)
| | >(вместо числа 21 отображается число 9,99).
А какой тип был у поля?
Может там 21 просто не помещалось? | |
|
|
|
|
|
|
|
для: Trianon
(10.04.2010 в 22:05)
| | float (3,2), а потом decimal (3,2). | |
|
|
|
|
|
|
|
для: baston
(10.04.2010 в 22:18)
| | и то и другое - число из трех десятичных разрядов, два из которых - после десятичной точки. | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2010 в 00:40)
| | Прошу прощения, так как я с математикой никогда не дружил и терминология ее меня только путает.
Но цифры в скобках я разумею так: первые цифры определяют общее количество символов до разделителя, цифры после запятой - кол-во символов после разделителя.
Поскольку вводилась цифра 21, то думалось, что будет отображаться 21,00. Но никак не 9,99 (откуда вообще взялась эта цифра я так и не понимаю).
Даже если ввожу цифру 21.0, то все равно отображается эта 9,99. | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2010 в 00:40)
| | Однако я неверно понимал.
Сейчас методом тыка установив в скобках (5,2) я получил желаемое.
Таким образом, цифра 5 означает общее количество символов в цифре, а 2 - кол-во символов после разделителя.
Спасибо, что обратили мое особое внимание на данный момент! | |
|
|
|
|
|
|
|
для: baston
(11.04.2010 в 09:46)
| | Тогда возникает другой вопрос: значения в типе float и decimal хранятся как строки (это я вычитал из книги), а значения в double как вещественные типы. То есть float и decimal это строковые типы поля, а double - цифровой. Верно? | |
|
|
|
|
|
|
|
для: baston
(11.04.2010 в 09:51)
| | неверно.
Значения типов float и decimal хранятся вовсе не как строки.
Значения типа float хранятся в обычном float-представлении согласно стандарта.
Значения типа decimal хранятся в виде массива двоично-упакованных 9-разрядных фрагментов.
Все три типа являются числовыми.
Определение "цифровой" использовать не стоит. Слишком туманное. | |
|
|
|
|
|
|
|
для: baston
(11.04.2010 в 09:46)
| | >Однако я неверно понимал.
>Сейчас методом тыка
А зачем методом тыка-то?
Там жирным было выделено важное.
Это даже если на минуточку забыть о мануале.
>Спасибо, что обратили мое особое внимание на данный момент!
Теперь Вы можете объяснить, почему в ячейке оказалось 9.99 | |
|
|
|
|
|
|
|
для: Trianon
(11.04.2010 в 10:37)
| | >А зачем методом тыка-то?
>Там жирным было выделено важное.
>Это даже если на минуточку забыть о мануале.
Верно, да я в тот момент не понимал написанное. Такое впечатление, будто смотрел, да не видел. Ну, а метод тыка один из лучших способов освоения материала, если при этом возникает понимание. В данном случае, под тыком я понимаю не просто случайный выбор того или иного решения, а последовательное исследование различных вариантов и отсечения неподходящих.
>Теперь Вы можете объяснить, почему в ячейке оказалось 9.99
Могу объяснить так: поскольку было задано общее кол-во чисел 3, то и видим здесь три числа, два из которых после разделителя. И это максимальное число в данном случае. То, что мы бы вводили менее 9,99, отображалось бы правильно, а как только вводим большое число, то срабатывает ограничение. | |
|
|
|
|
|
|
|
для: baston
(11.04.2010 в 15:10)
| | Верно. единственное замечание - не числа три, а цифры.
1346461 - это число,
1, 3, 4, 6, - это его цифры.
была задана общая точность величины 3 значащих цифры. Вот три цифры мы и видим.
Ближайшее число к 21, кторое помещается в сетку x.xx будет как раз 9.99 | |
|
|
|