Проверка в новой структуре базы данных Я видел, что кто-то изменил поле с float на double. Интересно, почему, я проверил документацию mysql, но честно не понял, в чем разница.MySQL: В чем разница между float и double?
Может кто-нибудь объяснить?
Проверка в новой структуре базы данных Я видел, что кто-то изменил поле с float на double. Интересно, почему, я проверил документацию mysql, но честно не понял, в чем разница.MySQL: В чем разница между float и double?
Может кто-нибудь объяснить?
Оба они представляют числа с плавающей запятой. A FLOAT
предназначен для одинарной точности, а DOUBLE
- для чисел с двойной точностью.
MySQL использует четыре байта для значений с одной точностью и восемь байтов для значений двойной точности.
Существует большое отличие от чисел с плавающей запятой и десятичных (числовых) чисел, которые вы можете использовать с типом данных DECIMAL
. Это используется для хранения точных значений числовых данных, в отличие от чисел с плавающей запятой, где важно сохранить точную точность, например, с денежными данными.
Хорошо, имеет смысл. Благодаря! – janpio
Можете ли вы подробно остановиться на примере – Kailas
. Поплавки Qailas округлены, а десятичные знаки - нет. Десятичный (9,3) может быть, например, 123456.789, тогда как если бы вы попытались сохранить 123456.789, он вставил бы как 123456.0 в качестве поплавка. – Blake
Удваиваются как плавающие, за исключением того факта, что они в два раза больше. Это позволяет повысить точность.
Обратите внимание, что после некоторой точки плавает и удваивается. Например, 100000.1 обрезает до 100000 в качестве поплавка. – Blake
FLOAT хранит номера с плавающей точкой с точностью до восьми мест и имеет четыре байта, в то время как DOUBLE хранит числа с плавающей запятой с точностью до 18 мест и имеет восемь байтов.
Возможно, этот пример может объяснить.
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 |
+--------------------+---------+
Возможно, лучшим сравнением было бы дать fla и flb 2 десятичные точки. 'float (10, 2)' – Grateful
Float имеет 32 бита (4 байта) с точностью до 8 мест. Двойной имеет 64 бит (8 байт) с точностью до 16 мест.
Если вам нужна более высокая точность, используйте Double вместо из Float.
Мысль я бы добавить свой собственный пример, который помог мне увидеть разницу, используя значение 1.3
при добавлении или умножения с другим float
, decimal
и double
.
1.3
поплавка добавлен в 1.3
различных типов:
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.3
поплавка, умноженной на 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 может дать вам некоторые неожиданные проблемы, потому что все вычисления в MySQL выполняются с двойной точностью»] (http://dev.mysql.com /doc/refman/5.0/en/numeric-type-overview.html) –
Я предполагаю, что вы имели в виду эту ссылку: http://dev.mysql.com/doc/refman/5.0/en/problems-with-float.html – arun
Это могло бы быть более полезным: http://stackoverflow.com/questions/5150274/difference-between-float-and-decimal-data-type –