Я работал над проектом с большим количеством чисел, вставленных в таблицу базы данных. Теперь, когда я закончил код, я проверял значения на наличие ошибок и заметил, что мое значение 3075277 преобразуется в 3075280 при вставке в БД, а 3075255 будет 3075260.
Тип столбца — Float. Что я должен изменить, чтобы отключить округление? У этого даже нет десятичных чисел, почему это округляется так? Я использую параметры по умолчанию, только изменил параметры сортировки на utf8_general_ci и изменил тип на varchar и длина в некоторых и плавающий в других.
Теперь вы используете FLOAT
введите, но получаете ошибку, потому что вы сохраняете большое десятичное число в базе данных. Вы должны пойти на DOUBLE
,
Хотя FLOAT
а также DOUBLE
похожи, потому что они хранят значение в приблизительном значении, но это DOUBLE составляет 8 байтов, и FLOAT
это 4 байта.
FLOAT для одинарной точности, а DOUBLE для чисел двойной точности.
MySQL использует четыре байта для значений одинарной точности и восемь байтов для значений двойной точности.
Существует большое отличие от чисел с плавающей запятой и десятичных (числовых) чисел, которые можно использовать с типом данных DECIMAL. Это используется для хранения точных числовых значений данных, в отличие от чисел с плавающей запятой, где важно сохранить точную точность, например, с денежными данными.
Как и в вашем случае, для больших чисел вы хотели бы DOUBLE
вместо FLOAT
,
Эта проблема связана с MySQL, а не с Phpmyadmin.
FLOAT
имеет 6-7 значащих цифр точности, как вы видите с искаженными значениями. Под «значащими цифрами» я подразумеваю начинать где угодно:
1234567xxxx.
12345.67xxx
1.234567xxx
0.0000001234567xxx
Это xxx
скорее всего, это нули или какой-то «шум», а не исходное значение, которое вы указали в столбце.
DOUBLE
дает вам около 16 значащих цифр.
DECIMAL(9,0)
дает вам 9 цифр слева от десятичной точки, ни один после. Вроде как INT
,
DECIMAL(9,4)
дает вам 5 (9-4) цифр слева от точки; 4 после.
Какие номера вы храните? Деньги? Научные измерения? Астрономические расстояния? DT богатство?