Diğerlerinin de belirttiği gibi, BigDecimal11.4'ün tam bir temsilini istiyorsanız, muhtemelen sınıfı kullanmak isteyeceksiniz.
Şimdi, bunun neden olduğuna dair küçük bir açıklama:
floatVe doubleJava ilkel türleri vardır kayan nokta sayısı fraksiyonu ve bir üs bir ikili temsili olarak depolanır numaraları.
Daha spesifik olarak, tür gibi çift kesinlikli kayar nokta değeri double64 bitlik bir değerdir, burada:
- 1 bit işareti belirtir (pozitif veya negatif).
- Üs için 11 bit.
- Anlamlı basamaklar için 52 bit (ikili olarak kesirli kısım).
Bu parçalar, doublebir değerin temsilini üretmek için birleştirilir .
(Kaynak: Wikipedia: Çift hassasiyet )
Kayan nokta değerlerinin Java'da nasıl işlendiğine ilişkin ayrıntılı bir açıklama için bkz. Bölüm 4.2.3: Kayan Nokta Türleri, Biçimleri ve Java Dili Belirtiminin Değerleri .
byte, char, int, longTürleri vardır sabit nokta numaralarının tam representions olan sayılar,. Sabit nokta numaralarının aksine, kayan nokta sayıları bazen ("çoğu zaman" varsaymak güvenlidir) bir sayının tam bir temsilini döndüremeyecektir. 11.399999999999Sonuç olarak bununla sonuçlanmanızın nedeni budur 5.6 + 5.8.
Tam olarak 1.5 veya 150.1005 gibi bir değere ihtiyaç duyduğunuzda, sayıyı tam olarak temsil edebilecek sabit nokta türlerinden birini kullanmak istersiniz.
Zaten birkaç kez bahsedildiği gibi, Java BigDecimalçok büyük sayıları ve çok küçük sayıları işleyecek bir sınıfa sahiptir.
BigDecimalSınıfın Java API Başvurusu'ndan :
Değişmez, rasgele kesinlikli imzalı ondalık sayılar. BigDecimal, rasgele bir hassas tam sayı ölçeklenmemiş değer ve 32 bit tam sayı ölçeğinden oluşur. Sıfır veya pozitifse, ölçek ondalık virgülünün sağındaki basamak sayısıdır. Negatifse, sayının ölçeklendirilmemiş değeri, ölçeğin reddinin gücüyle on ile çarpılır. Bu nedenle BigDecimal tarafından temsil edilen sayının değeri (ölçeklenmemişDeğeri × 10 ^ ölçek) 'dir.
Kayan Taşma ile ilgili kayan nokta sayıları ve kesinliği ile ilgili birçok soru vardır. İlginizi çekebilecek ilgili soruların listesi:
Kayan nokta sayılarının gerçekten cesur ayrıntılarına inmek istiyorsanız, Her Bilgisayar Bilimcisinin Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler'e bir göz atın .