Yeni veritabanı yapısını kontrol ederken, birinin bir alanı float'tan double'a değiştirdiğini gördüm. Nedenini merak ediyorum, mysql belgelerini kontrol ettim, ancak dürüst olmak gerekirse farkın ne olduğunu anlamadım.
Biri açıklayabilir mi?
Yeni veritabanı yapısını kontrol ederken, birinin bir alanı float'tan double'a değiştirdiğini gördüm. Nedenini merak ediyorum, mysql belgelerini kontrol ettim, ancak dürüst olmak gerekirse farkın ne olduğunu anlamadım.
Biri açıklayabilir mi?
Yanıtlar:
Her ikisi de kayan nokta sayılarını temsil eder. A FLOAT, tek DOUBLEduyarlıklı sayılar , a ise çift duyarlıklı sayılar içindir.
MySQL, tek duyarlıklı değerler için dört bayt ve çift duyarlıklı değerler için sekiz bayt kullanır.
DECIMALVeri türü ile kullanabileceğiniz kayan nokta sayıları ve ondalık (sayısal) sayılardan büyük bir fark vardır . Bu, örneğin parasal verilerde kesin kesinliğin korunmasının önemli olduğu kayan noktalı sayılardan farklı olarak tam sayısal veri değerlerini depolamak için kullanılır.
Belki bu örnek açıklayabilir.
CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2));
Bunun gibi bir masamız var:
+-------+-------------+
| Field | Type |
+-------+-------------+
| fla | float |
| flb | float |
| dba | double(10,2)|
| dbb | double(10,2)|
+-------+-------------+
İlk fark için, her alana '1.2' ile bir kayıt eklemeye çalışıyoruz :
INSERT INTO `test` values (1.2,1.2,1.2,1.2);
Aşağıdaki gibi gösteren tablo:
SELECT * FROM `test`;
+------+------+------+------+
| fla | flb | dba | dbb |
+------+------+------+------+
| 1.2 | 1.2 | 1.20 | 1.20 |
+------+------+------+------+
Farkı gör?
Bir sonraki örneğe çalışıyoruz:
SELECT fla+flb, dba+dbb FROM `test`;
Hola! Farkı şu şekilde bulabiliriz:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
float(10, 2)
Çiftler, iki kat daha büyük olmaları haricinde, tıpkı şamandıralar gibidir. Bu, daha fazla doğruluk sağlar.
Düşünce Bana değerini kullanarak farkı görmek yardımcı kendi örneğini eklersiniz 1.3ekleyerek veya birbiriyle çarpılması zaman float, decimalve double.
1.3float ADDED to 1.3of different types:
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.3float MULTIPLIED 1.3farklı türlere göre:
| float | double | decimal |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |
Bu MySQL 6.7 kullanıyor
Sorgu:
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
Tablo Oluşturun ve Veri Girin:
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 kayan nokta numaralarını sekiz basamağa kadar doğrulukla depolar ve dört bayta sahipken, DOUBLE kayan nokta sayılarını 18 basamağa kadar doğrulukla depolar ve sekiz bayta sahiptir.
Float , 8 yer doğruluğu ile 32 bit (4 bayt) değerine sahiptir. Double , 16 yer doğruluğu ile 64 bit'e (8 bayt) sahiptir.
Daha iyi doğruluğa ihtiyacınız varsa Float yerine Double kullanın .