Ben tam tersine bakacağım.
FLOATyü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.
DECIMALparasal değerler için kullanılmalıdır. DECIMALBir değerin dolar / sent / euro / vb. değerine yuvarlanması gerektiğinde ikinci bir yuvarlamayı önler. Muhasebeciler sent fraksiyonlarını sevmezler.
MySQL'in uygulanması DECIMAL65 önemli basamak sağlar; FLOAT7 ve DOUBLEyaklaşık 16 verir . 7 genellikle sensörler ve bilimsel hesaplamalar için fazlasıyla yeterlidir.
"Yüzde" gelince - Bazen TINYINT UNSIGNEDsadece 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 100nedenle teknik olarak ihtiyacınız olacaktır DECIMAL(3,0).)
Veya bazen FLOAT0 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 TINYINT1 bayt (toplam 1 GB), ancak FLOAT4 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 INTveya 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 .