Son zamanlarda sayılarla çalışıyordum ve veritabanında depolanan değere bağlı olarak çift değerin hassasiyetini 6 basamaklı veya 4 basamaklı olarak ayarlamak istediğim bir durum vardı.
Örneğin, veritabanında hassasiyet 4 basamak olarak ayarlanmışsa, çıktı şu şekilde görünmelidir,
10.0000
.
DecimalFormatile ve
##.####` dizesini kullanarak denedim, ancak her seferinde sembol kullanmak can sıkıcı.
Daha iyi bir yaklaşım var mı, örneğin aşağıdaki gibi bir şey:
Double value = 10.0;
value.setPrecision(4);
Kayan nokta değerlerinin ondalık basamakları olmadığından, bir double (veya Çift) değerinin hassasiyetini belirli bir ondalık basamak sayısına ayarlayamazsınız. İkili basamakları vardır.
Daha sonra değerle ne yapmak istediğinize bağlı olarak, BigDecimal
veya DecimalFormat
aracılığıyla ondalık bir radikse dönüştürmeniz gerekecektir.
Kaçınılmaz *100/100 cevaplarının çürütülmesi için bu soruya verdiğim cevaba da bakınız.
doubleve
float` hassasiyeti, boyutlarına ve IEEE kayan nokta tiplerinin uygulanma şekline göre sabitlenir.
Öte yandan, çıktıdaki ondalık basamak sayısı bir biçimlendirme meselesidir. Aynı sabiti tekrar tekrar yazmanın kötü bir fikir olduğu konusunda haklısınız. Bunun yerine bir dize sabiti bildirmeli ve sembolik gösterimini kullanmalısınız.
private static final String DBL_FMT = "##.####";
Sembolik bir temsil kullanmak, kodunuzda arama yapmadan sabitin kullanıldığı tüm yerlerde hassasiyeti değiştirmenize olanak tanır.
EJP'yi genişletmek gerekirse, çiftlerle uğraşırken 'hassasiyet' kavramı son derece sıkıntılıdır. https://stackoverflow.com/a/3730040/390153 adresinde tartışıldığı gibi, hassasiyet ne olursa olsun 0,1'i çift olarak bile temsil edemezsiniz, aynı nedenle 1/3'ü 10 tabanında sonlu hassasiyetle temsil edemezsiniz.
Çözmeye çalıştığınız sorunu göz önünde bulundurmanız ve düşünmeniz gerekir:
a) İlk etapta çiftleri kullanmalı mıyım; eğer hassasiyet ilgili bir kavramsa, o zaman çiftleri kullanmak bir hata olabilir.
b) Eğer çiftler uygunsa, hassasiyet ile neyi kastediyorum? Yalnızca görüntülemeden bahsediyorsanız, mantığı bir görüntüleme işlevine sarın ve yalnızca tek bir yerde uğraşmanız gerekecektir; yani DRY ilkesini uygulayın.