BigDecimal değer üzerindeki virgülden sonraki sayıları kaybetmeyi sevmiyor. 1/3 dediğimiz zaman 0.333 sonucu çıkıp 3 ler sonsuza gidince de bu hatayı veriyor.
Bunu düzeltmek için aşağıdaki gibi BigDecimal sınıfına bu durumda nasıl davranması gerektiği söylenmelidir.
public static void main(String[] args) {
BigDecimal bir = BigDecimal.valueOf(1l);
BigDecimal uc = BigDecimal.valueOf(3l);
System.out.println(bir.divide(uc, MathContext.DECIMAL128));
}
BigDecimal.divide metodu iki parametre alıyor. Birincisi bölen değerimiz, diğeri de nasıl davranacağı hakkında bilgi. Mesela RoundingMode.FLOOR değerini ikinci parametreye verip sonucu direk yuvarlayabilirsiniz. Up deyip yukarı Down deyip aşağı çekebilirsiniz. Ama ben virgülden sonrasında belirli karaktere kadar destekleyeceğim derseniz MathContext.DECIMAL128 güzel bir seçenek olacaktır.
Yuvarlama örneği olarak
System.out.println(bir.divide(uc, RoundingMode.FLOOR));