Ben tam tersine bakacağım.
FLOAT
yüzdeler, ortalamalar, vb. gibi yaklaşık sayılar içindir. Değerleri uygulama kodunda veya FORMAT()
MySQL işlevini kullanarak görüntülerken biçimlendirme yapmanız gerekir .
Hiç test etme float_value = 1.3
; bunun başarısız olmasının birçok nedeni var.
DECIMAL
parasal değerler için kullanılmalıdır. DECIMAL
Bir değerin dolar / sent / euro / vb. değerine yuvarlanması gerektiğinde ikinci bir yuvarlamayı önler. Muhasebeciler sent fraksiyonlarını sevmezler.
MySQL'in uygulanması DECIMAL
65 önemli basamak sağlar; FLOAT
7 ve DOUBLE
yaklaşık 16 verir . 7 genellikle sensörler ve bilimsel hesaplamalar için fazlasıyla yeterlidir.
"Yüzde" gelince - Bazen TINYINT UNSIGNED
sadece 1 bayt depolama tüketmek ve çok fazla hassasiyete gerek duymadığımda kullandım; bazen kullandım FLOAT
(4 bayt). Yüzde için özel olarak ayarlanmış bir veri türü yoktur. (Ayrıca, DECIMAL(2,0)
değeri tutamayacağını unutmayın, bu 100
nedenle teknik olarak ihtiyacınız olacaktır DECIMAL(3,0)
.)
Veya bazen FLOAT
0 ile 1 arasında bir değer tutan bir kullandım . Ama sonra "yüzde" görüntülemeden önce 100 ile çarpmak emin olmak gerekir.
Daha
"Yüzde, ortalama, oran" üçü de yüzer gibi kokuyor, bu yüzden benim ilk tercihim olurdu.
Veri tipine karar vermek için bir kriter ... Değerin kaç kopyası var?
Yüzde sütun içeren milyar satırlık bir tablonuz varsa, bunun TINYINT
1 bayt (toplam 1 GB), ancak FLOAT
4 bayt (toplam 4 GB) alacağını düşünün . OTOH, çoğu uygulamada bu kadar satır yoktur, bu nedenle bu uygun olmayabilir.
"Genel" bir kural olarak, "tam" değerler bir INT
veya biçimini kullanmalıdır DECIMAL
. Hatalı şeyler (bilimsel hesaplamalar, karekökler, bölünme, vb.) Kullanmalı FLOAT
(veya DOUBLE
).
Ayrıca, çıktının biçimlendirmesi genellikle uygulamanın ön ucuna bırakılmalıdır. Yani, bir "ortalama" "14.6666666 ..." olarak hesaplanabilse de, ekran "14.7" gibi bir şey göstermelidir; bu insanlar için dostça. Bu arada, daha sonra "15" veya "14.667" tercih edilen çıktı biçimlendirme olduğuna karar vermek için temel değere sahipsiniz.
"0.00 - 100.00" aralığı , her zaman belirtilen hassasiyeti isteyeceğiniz ön belirleme ile FLOAT
çıktı biçimlendirmesi ile veya DECIMAL(5,2)
(3 bayt) ile yapılabilir .