Подтвердить что ты не робот

MySQL: Какая разница между float и double?

Проверяя новую структуру базы данных, я увидел, что кто-то изменил поле с float на double. Интересно, почему, я проверил документацию mysql, но честно не понял, в чем разница.

Может кто-нибудь объяснить?

4b9b3361

Ответ 1

Оба они представляют числа с плавающей запятой. A FLOAT предназначен для одиночной точности, а DOUBLE - для чисел с двойной точностью.

MySQL использует четыре байта для значений с одной точностью и восемь байтов для значений двойной точности.

Существует большое отличие от чисел с плавающей запятой и десятичных (числовых) чисел, которые вы можете использовать с типом данных DECIMAL. Это используется для хранения точных значений числовых данных, в отличие от чисел с плавающей запятой, где важно сохранять точную точность, например, с денежными данными.

Ответ 2

Возможно, этот пример может объяснить.

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 |
+--------------------+---------+

Ответ 3

Двойные пары похожи на поплавки, за исключением того, что они вдвое больше. Это позволяет повысить точность.

Ответ 4

FLOAT хранит числа с плавающей запятой с точностью до восьми мест и имеет четыре байта, в то время как DOUBLE хранит числа с плавающей запятой с точностью до 18 мест и имеет восемь байтов.

Ответ 5

Float имеет 32 бит (4 байта) с точностью до 8 мест. Двойной имеет 64 бит (8 байтов) с точностью до 16 мест.

Если вам нужна более высокая точность, используйте Двойной Float.

Ответ 6

Думал, что добавлю свой собственный пример, который помог мне увидеть разницу, используя значение 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);