Проверяя новую структуру базы данных, я увидел, что кто-то изменил поле с 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`;
Hola! Мы можем найти разные вещи:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
Двойные пары похожи на поплавки, за исключением того, что они вдвое больше. Это позволяет повысить точность.
FLOAT хранит числа с плавающей запятой с точностью до восьми мест и имеет четыре байта, в то время как DOUBLE хранит числа с плавающей запятой с точностью до 18 мест и имеет восемь байтов.
Float имеет 32 бит (4 байта) с точностью до 8 мест. Двойной имеет 64 бит (8 байтов) с точностью до 16 мест.
Если вам нужна более высокая точность, используйте Двойной Float.
Думал, что добавлю свой собственный пример, который помог мне увидеть разницу, используя значение 1.3
при добавлении или умножении на другие float
, decimal
и double
.
|float add | double add | decimal add | float multiply | double multiply | decimal multiply |
+-------------------+------------+-------------+--------------------+--------------------+------------------+
|2.5999999046325684 | 2.6 | 2.60000 | 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |
Это использование MySQL 6.7
Query:
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);