Saya akan mengambil posisi sebaliknya.
FLOAT
adalah untuk angka perkiraan, seperti persentase, rata-rata, dll. Anda harus melakukan pemformatan saat Anda menampilkan nilai, baik dalam kode aplikasi atau menggunakan FORMAT()
fungsi MySQL.
Jangan pernah menguji float_value = 1.3
; ada banyak alasan mengapa itu akan gagal.
DECIMAL
harus digunakan untuk nilai moneter. DECIMAL
menghindari pembulatan kedua saat nilai perlu dibulatkan ke dolar / sen / euro / dll. Akuntan tidak suka pecahan sen.
Implementasi MySQL DECIMAL
memungkinkan 65 digit signifikan; FLOAT
memberi sekitar 7 dan DOUBLE
sekitar 16. 7 biasanya lebih dari cukup untuk sensor dan perhitungan ilmiah.
Adapun "persentase" - Kadang-kadang saya telah menggunakan TINYINT UNSIGNED
ketika saya ingin mengkonsumsi hanya 1 byte penyimpanan dan tidak perlu banyak presisi; kadang saya menggunakan FLOAT
(4 byte). Tidak ada tipe data yang disetel khusus untuk persentase. (Perhatikan juga, itu DECIMAL(2,0)
tidak dapat menahan nilainya 100
, jadi secara teknis Anda perlu DECIMAL(3,0)
.)
Atau kadang-kadang saya menggunakan nilai FLOAT
yang memegang antara 0 dan 1. Tapi kemudian saya harus memastikan untuk mengalikan dengan 100 sebelum menampilkan "persentase".
Lebih
Ketiga "persentase, rata-rata, rata" bau seperti mengapung, jadi itu akan menjadi pilihan pertama saya.
Satu kriteria untuk memutuskan tipe data ... Berapa banyak salinan nilai yang akan ada?
Jika Anda memiliki tabel miliar baris dengan kolom untuk persentase, pertimbangkan bahwa TINYINT
akan membutuhkan 1 byte (total 1GB), tetapi FLOAT
akan mengambil 4 byte (total 4GB). OTOH, sebagian besar aplikasi tidak memiliki banyak baris, jadi ini mungkin tidak relevan.
Sebagai aturan 'umum', nilai "tepat" harus menggunakan beberapa bentuk INT
atau DECIMAL
. Hal-hal yang tidak tepat (perhitungan ilmiah, akar kuadrat, pembagian, dll) harus menggunakan FLOAT
(atau DOUBLE
).
Selanjutnya, format output biasanya harus dibiarkan ke ujung depan aplikasi. Artinya, meskipun "rata-rata" dapat menghitung menjadi "14.6666666 ...", layar akan menampilkan sesuatu seperti "14.7"; ini lebih bersahabat dengan manusia. Sementara itu, Anda memiliki nilai dasar untuk nanti memutuskan bahwa "15" atau "14,667" adalah format output yang disukai.
Rentang "0,00 - 100,00" dapat dilakukan dengan FLOAT
dan menggunakan pemformatan output atau dengan DECIMAL(5,2)
(3 byte) dengan pra-penentuan bahwa Anda akan selalu menginginkan ketepatan yang ditunjukkan .