Merhaba, genellikle web teknolojileri, web programlama dilleri, linux ile ilgili yazıların yazıldığı bir sitede bulunmaktasınız. Eğer bu konular ilginizi çekiyorsa yazılarıma abone olmanızı öneririm. Yazar hakkında ayrıntılı bilgi için tıklayın.

Java BigDecimal.divide() fonksiyonu

Java’da iki BigDecimal değeri divide() fonksiyonu ile bölmek istediğimde şu hatayı aldım;

Non-terminating decimal expansion; no exact representable decimal result.

Hatayı almamın sebebi divide fonksiyonunu yanlış kullanmammış. Şöyle iki değişkenimiz olsun;

BigDecimal sayi1 = BigDecimal.valueOf(100);
BigDecimal sayi2 = BigDecimal.valueOf(50);

Bunları bölmeye çalışalım;

sayi1.divide(sayi2);

İlgili referans sayfasından da görebileceğiniz gibi bu şekilde bir kullanım yanlış. roundingMode parametresini kullanmamız zorunlu. Peki roundingMode kullanmadan bölmek mümkün mü ? Ben böyle yaptım (alttaki kod tek satır));

BigDecimal sonuc = new BigDecimal(sayi1.doubleValue() / sayi2.doubleValue());

Bu kod çalıştı. Bunun daha iyi bir yolu varsa yorum olarak yazarsanız sevinirim.

Creative Commons License
Java Dergisi

4 Yorum

sonuc = sayi1.divide(sayi2, BigDecimal.ROUND_HALF_UP);

roundingMode set ediliyor.

Hüseyin Berberoğlu Aralık 23rd, 2008, 12:14

Bu şekilde yapınca kesin sonucu alabiliyor muyuz ? Benim yaptığım işlemler finansal işlemler. Yani küsüratlar da önemli, yuvarlama yapamıyorum. ROUND_UNNECESSARY denedim ancak çalışmadı, hata verdi. Bende bu yolla yaptım.

divide metotunun 3 parametreli versiyonunu kullanmak gerekiyormuş Hüseyin :)
divide(BigDecimal b,int scale, RoundingMode r) şeklinde

Hüseyin Berberoğlu Mart 24th, 2009, 11:28

@Selman teşekkürler :)

Yorum Yazın

Kısa da olsa bir yorum yazmanız yazar için çok önemli.
Yorumunuz