Antara kedua tipe data tersebut, menunjukkan bahwa keduanya bisa dimasukkan nilai desimal. Tapi untuk penerapannya adalah berbeda. Mungkin untuk mengetahui perbedaaan lebih lanjutnya, silahkan ikuti step-step berikut (saya contohkan di console):
1. Buat sebuah tabel desimal yang berisi field fa,fb,da dan db
2. Untuk perbedaan pertama, silahkan masukkan nilai "1.2" ke semua field :
3. Kemudian coba kita lakukan perhitungan berikut :
4. Nah, sekarang kita coba lakukan perhitungan yang float :
Terlihat lagi kan ?? Jika kita menjumlahkan nilai dari tipe data decimal, maka kita pun akan mendapat nilai yang presisi juga, yaitu nilai sesuai penjumlahan. Dan saat kita membandingkan hasilnya dengan nilai yang dimaksudkan, maka akan sesuai satu dengan yang lain. Ini berarti nilai 2.4 di decimal adalah sesuai dengan nilai 2.4 di hitungan matematis. Tapi hal ini tidak berlaku di float. Jika kita menjumlahkan nilainya, maka kita akan mendapatkan nilai yang tidak presisi, dimana ada kelebihan sedikit di belakang koma nya. Dan saat kita membandingkan hasilnya dengan nilai yang kita maksud, maka tidak sesuai satu dengan yang lain. Ini berarti nilai hasil penjumlahan di float tidak sesuai dengan nilai 2.4 pada perhitungan matematis :D.
1. Buat sebuah tabel desimal yang berisi field fa,fb,da dan db
create table desimal (fa float,fb float,da decimal(10,2), db decimal(10,2));
Struktur tabelnya harus seperti ini :+-------+---------------+
| Field | Type |
+-------+---------------+
| fa | float |
| fb | float |
| da | decimal(10,2) |
| db | decimal(10,2) |
+-------+---------------+
2. Untuk perbedaan pertama, silahkan masukkan nilai "1.2" ke semua field :
insert into desimal values (1.2,1.2,1.2,1.2);
Kemudian kita lihat isi data tabelnya :select * from desimal
Maka kita akan tahu perbedaannya :+------+------+------+------+
| fa | fb | da | db |
+------+------+------+------+
| 1.2 | 1.2 | 1.20 | 1.20 |
+------+------+------+------+
Terlihat kan ?? Ya. Untuk float, nilai akan ditampilkan secara menyeluruh mengikuti isi walau berapapun angka di belakang desimalnya. Sedangkan untuk decimal, nilai akan dibuat presisi mengikuti ketentuannya, yaitu 2 angka dibelakang koma.3. Kemudian coba kita lakukan perhitungan berikut :
select da,db,da+db from desimal;
Maka hasilnya : +------+------+-------+
| da | db | da+db |
+------+------+-------+
| 1.20 | 1.20 | 2.40 |
+------+------+-------+
Lalu, kita lakukan perbandingan nilai :select da+db=2.4 from desimal;
Hasilnya :+-----------+
| da+db=2.4 |
+-----------+
| 1 |
+-----------+
Nilai 1 menandakan true yang berarti perbandingannya adalah benar.4. Nah, sekarang kita coba lakukan perhitungan yang float :
select fa,fb,fa+fb from desimal;
Ternyata hasilnya :+------+------+------------------+
| fa | fb | fa+fb |
+------+------+------------------+
| 1.2 | 1.2 | 2.40000009536743 |
+------+------+------------------+
Dan kalau kita lakukan perbandingan nilai :select fa+fb=2.4 from desimal;
Ternyata hasilnya menjadi :+-----------+
| fa+fb=2.4 |
+-----------+
| 0 |
+-----------+
Nilai 0 menandakan false yang berarti perbandingannya adalah salah.Terlihat lagi kan ?? Jika kita menjumlahkan nilai dari tipe data decimal, maka kita pun akan mendapat nilai yang presisi juga, yaitu nilai sesuai penjumlahan. Dan saat kita membandingkan hasilnya dengan nilai yang dimaksudkan, maka akan sesuai satu dengan yang lain. Ini berarti nilai 2.4 di decimal adalah sesuai dengan nilai 2.4 di hitungan matematis. Tapi hal ini tidak berlaku di float. Jika kita menjumlahkan nilainya, maka kita akan mendapatkan nilai yang tidak presisi, dimana ada kelebihan sedikit di belakang koma nya. Dan saat kita membandingkan hasilnya dengan nilai yang kita maksud, maka tidak sesuai satu dengan yang lain. Ini berarti nilai hasil penjumlahan di float tidak sesuai dengan nilai 2.4 pada perhitungan matematis :D.
Begitulah perbedaannya. Demikian hasil analisis saya, kalau ada tambahannya, silahkan beri komentar...