Проверяя новую структуру базы данных, я увидел, что кто-то изменил значение поля с float на double. Интересно, почему, я проверил документацию mysql, но, честно говоря, не понял, в чем разница.
Кто-нибудь может объяснить?
Проверяя новую структуру базы данных, я увидел, что кто-то изменил значение поля с float на double. Интересно, почему, я проверил документацию mysql, но, честно говоря, не понял, в чем разница.
Кто-нибудь может объяснить?
Ответы:
Оба они представляют собой числа с плавающей запятой. A FLOAT
для чисел с одинарной точностью, а DOUBLE
для чисел с двойной точностью.
MySQL использует четыре байта для значений с одинарной точностью и восемь байтов для значений с двойной точностью.
Существует большое отличие от чисел с плавающей запятой и десятичных (числовых) чисел, которые вы можете использовать с DECIMAL
типом данных. Это используется для хранения точных числовых значений данных, в отличие от чисел с плавающей запятой, где важно сохранить точную точность, например, с денежными данными.
Возможно, этот пример мог бы объяснить.
CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2));
У нас есть такая таблица:
+-------+-------------+
| Field | Type |
+-------+-------------+
| fla | float |
| flb | float |
| dba | double(10,2)|
| dbb | double(10,2)|
+-------+-------------+
Для первого отличия мы пытаемся вставить запись с '1,2' в каждое поле:
INSERT INTO `test` values (1.2,1.2,1.2,1.2);
Таблица выглядит так:
SELECT * FROM `test`;
+------+------+------+------+
| fla | flb | dba | dbb |
+------+------+------+------+
| 1.2 | 1.2 | 1.20 | 1.20 |
+------+------+------+------+
Увидеть разницу?
Мы пробуем следующий пример:
SELECT fla+flb, dba+dbb FROM `test`;
Привет! Мы можем найти разницу так:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
float(10, 2)
Двойники похожи на поплавки, за исключением того, что они вдвое больше. Это позволяет добиться большей точности.
Думал , что я хотел бы добавить свой собственный пример , который помог мне увидеть разницу , используя значение 1.3
при добавлении или умножения с другим float
, decimal
и double
.
1.3
поплавки ДОБАВЛЕНЫ в 1.3
разные типы:
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.3
float, УМНОЖЕННЫЙ 1.3
разными типами:
| float | double | decimal |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |
Это использует MySQL 6.7
Запрос:
SELECT
float_1 + float_2 as 'float add',
double_1 + double_2 as 'double add',
decimal_1 + decimal_2 as 'decimal add',
float_1 * float_2 as 'float multiply',
double_1 * double_2 as 'double multiply',
decimal_1 * decimal_2 as 'decimal multiply'
FROM numerics
Создать таблицу и вставить данные:
CREATE TABLE `numerics` (
`float_1` float DEFAULT NULL,
`float_2` float DEFAULT NULL,
`double_1` double DEFAULT NULL,
`double_2` double DEFAULT NULL,
`decimal_1` decimal(10,5) DEFAULT NULL,
`decimal_2` decimal(10,5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `_numerics`
(
`float_1`,
`float_2`,
`double_1`,
`double_2`,
`decimal_1`,
`decimal_2`
)
VALUES
(
1.3,
1.3,
1.3,
1.3,
1.30000,
1.30000
);
FLOAT хранит числа с плавающей запятой с точностью до восьми разрядов и имеет четыре байта, тогда как DOUBLE хранит числа с плавающей запятой с точностью до 18 разрядов и имеет восемь байтов.
Float имеет 32 бита (4 байта) с точностью до 8 знаков. Double имеет 64 бита (8 байт) с точностью до 16 знаков.
Если вам нужна более высокая точность, используйте Double вместо Float .