Aşağıda yazdığım kod hata alıyor. Nedeni ve çözümü hakkında fikriniz var mı?
import java.math.BigDecimal;
public class BigDecimalBoluUc {
public static void main(String[] args) {
var bir = new BigDecimal(1);
var uc = new BigDecimal(3);
System.out.print(bir.divide(uc));
}
}
java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
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.
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));