Memeriksa dalam struktur database baru saya melihat bahwa seseorang mengubah bidang dari float menjadi double. Bertanya-tanya mengapa, saya memeriksa dokumentasi mysql, tetapi jujur tidak mengerti apa bedanya.
Bisakah seseorang menjelaskan?
Memeriksa dalam struktur database baru saya melihat bahwa seseorang mengubah bidang dari float menjadi double. Bertanya-tanya mengapa, saya memeriksa dokumentasi mysql, tetapi jujur tidak mengerti apa bedanya.
Bisakah seseorang menjelaskan?
Jawaban:
Keduanya mewakili bilangan floating point. A FLOAT
untuk DOUBLE
angka presisi tunggal, sedangkan a untuk angka presisi ganda.
MySQL menggunakan empat byte untuk nilai presisi tunggal dan delapan byte untuk nilai presisi ganda.
Ada perbedaan besar dari angka floating point dan angka desimal (numerik), yang dapat Anda gunakan dengan DECIMAL
tipe datanya. Ini digunakan untuk menyimpan nilai data numerik yang tepat, tidak seperti angka floating point, di mana penting untuk menjaga presisi yang tepat, misalnya dengan data moneter.
Mungkin contoh ini bisa menjelaskan.
CREATE TABLE `test`(`fla` FLOAT,`flb` FLOAT,`dba` DOUBLE(10,2),`dbb` DOUBLE(10,2));
Kami memiliki tabel seperti ini:
+-------+-------------+
| Field | Type |
+-------+-------------+
| fla | float |
| flb | float |
| dba | double(10,2)|
| dbb | double(10,2)|
+-------+-------------+
Untuk perbedaan pertama, kami mencoba memasukkan catatan dengan '1.2' ke setiap bidang:
INSERT INTO `test` values (1.2,1.2,1.2,1.2);
Tabel menunjukkan seperti ini:
SELECT * FROM `test`;
+------+------+------+------+
| fla | flb | dba | dbb |
+------+------+------+------+
| 1.2 | 1.2 | 1.20 | 1.20 |
+------+------+------+------+
Lihat perbedaannya?
Kami mencoba contoh berikutnya:
SELECT fla+flb, dba+dbb FROM `test`;
Halo! Kita bisa menemukan perbedaannya seperti ini:
+--------------------+---------+
| fla+flb | dba+dbb |
+--------------------+---------+
| 2.4000000953674316 | 2.40 |
+--------------------+---------+
float(10, 2)
Ganda seperti pelampung, kecuali kenyataan bahwa mereka dua kali lebih besar. Ini memungkinkan akurasi yang lebih besar.
Pikir saya akan menambahkan contoh saya sendiri yang membantu saya melihat perbedaan menggunakan nilai 1.3
saat menambahkan atau mengalikan dengan yang lain float
, decimal
dan double
.
1.3
float DITAMBAHKAN ke 1.3
berbagai jenis:
|float | double | decimal |
+-------------------+------------+-----+
|2.5999999046325684 | 2.6 | 2.60000 |
1.3
float DIBAGI oleh 1.3
jenis yang berbeda:
| float | double | decimal |
+--------------------+--------------------+--------------+
| 1.6899998760223411 | 1.6900000000000002 | 1.6900000000 |
Ini menggunakan MySQL 6.7
Pertanyaan:
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
Buat Tabel dan Masukkan Data:
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 menyimpan angka floating point dengan akurasi hingga delapan tempat dan memiliki empat byte sementara DOUBLE menyimpan angka floating point dengan akurasi hingga 18 tempat dan memiliki delapan byte.
Float memiliki 32 bit (4 byte) dengan akurasi 8 tempat. Double memiliki 64 bit (8 byte) dengan akurasi 16 tempat.
Jika Anda membutuhkan akurasi yang lebih baik, gunakan Double daripada Float .