Перевіряючи нову структуру бази даних, я побачив, що хтось змінив поле з float на double. Цікаво, чому я перевірив документацію на mysql, але чесно не зрозумів, у чому різниця.
Може хтось пояснить?
Перевіряючи нову структуру бази даних, я побачив, що хтось змінив поле з float на double. Цікаво, чому я перевірив документацію на mysql, але чесно не зрозумів, у чому різниця.
Може хтось пояснить?
Відповіді:
Вони обидва представляють числа з плаваючою комою. A FLOAT- для одноточної, а a 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.3float доданий до 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 зберігає номери з плаваючою комою з точністю до восьми місць і має чотири байти, а DOUBLE зберігає числа з плаваючою комою з точністю до 18 місць і має вісім байтів.
Float має 32 біт (4 байти) з точністю до 8 місць. Double має 64 біт (8 байт) з точністю до 16 місць.
Якщо вам потрібна краща точність, використовуйте Double замість Float .