Java BigDecimal.divide() fonksiyonu

Posted: Aralık 22nd, 2008 | Author: | Filed under: Java | Tags: , , , | 4 Comments »

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.


4 Comments on “Java BigDecimal.divide() fonksiyonu”

  1. 1 cagri karahan said at 11:26 on Aralık 23rd, 2008:

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

    roundingMode set ediliyor.

  2. 2 Hüseyin Berberoğlu said at 12:14 on Aralık 23rd, 2008:

    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.

  3. 3 Selman said at 15:32 on Mart 20th, 2009:

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

  4. 4 Hüseyin Berberoğlu said at 11:28 on Mart 24th, 2009:

    @Selman teşekkürler :)


Leave a Reply