Я не могу понять DECIMAL MySQL. Мне нужно, чтобы строка могла содержать число от 00.0001 до 99.9999. Как бы я структурировал его так, чтобы он работал так?
Я не могу понять DECIMAL MySQL. Мне нужно, чтобы строка могла содержать число от 00.0001 до 99.9999. Как бы я структурировал его так, чтобы он работал так?
Ответы:
Столбцы DOUBLE не совпадают со столбцами DECIMAL, и у вас возникнут проблемы, если вы будете использовать столбцы DOUBLE для финансовых данных.
DOUBLE на самом деле просто FLOAT версия с двойной точностью (64 бит вместо 32 бит) . Числа с плавающей точкой являются приблизительными представлениями действительных чисел, и они не являются точными. На самом деле, простые числа, такие как 0,01, не имеют точного представления в типах FLOAT или DOUBLE.
Столбцы DECIMAL являются точными представлениями, но они занимают гораздо больше места для гораздо меньшего диапазона возможных чисел. Чтобы создать столбец, способный содержать значения от 0,0001 до 99,9999, как вы и просили, вам понадобится следующее утверждение
CREATE TABLE your_table
(
your_column DECIMAL(6,4) NOT NULL
);
Определение столбца соответствует формату DECIMAL (M, D), где M - максимальное количество цифр ( точность ), а D - количество цифр справа от десятичной точки ( шкала ).
Это означает, что предыдущая команда создает столбец, который принимает значения от -99,9999 до 99,9999. Вы также можете создать столбец НЕПИСАННЫЙ ДЕСЯТИЧНЫЙ в диапазоне от 0,0000 до 99,9999.
Для получения дополнительной информации о MySQL DECIMAL официальные документы всегда являются отличным ресурсом.
Имейте в виду, что вся эта информация верна для версий MySQL 5.0.3 и выше. Если вы используете предыдущие версии, вам действительно следует обновить.
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Он вернет ошибку вне диапазона для отрицательных значений. Вы также можете создать без знака FLOAT и DOUBLE. Руководство: dev.mysql.com/doc/refman/5.0/ru/numeric-type-overview.html
Хотя приведенные выше ответы кажутся правильными, просто простое объяснение, чтобы дать вам представление о том, как это работает.
Предположим, что ваш столбец установлен в DECIMAL(13,4)
. Это означает, что общий размер столбца будет составлять 13 цифр, из которых 4 будут использоваться для точного представления.
Итак, в итоге, для этого столбца у вас будет максимальное значение: 999999999.9999
Есть правильные решения в комментариях, но суммировать их в один ответ:
Вы должны использовать DECIMAL (6,4).
Тогда у вас может быть 6 общих чисел, 2 до и 4 после десятичной точки (шкала). По крайней мере, в соответствии с этим .
MySQL 5.x спецификация для десятичного типа данных является: DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
. Ответ выше неверен, говоря, что беззнаковые десятичные числа невозможны.
Чтобы определить поле , позволяющее только неподписанные знаки после запятой, с общей длиной 6 цифр, 4 из которых являются десятичными, вы должны использовать: DECIMAL (6,4) UNSIGNED
.
Вы также можете создавать неподписанные (т.е. не отрицательные) типы данных FLOAT и DOUBLE.