638 Stimmen

ArithmeticException: "Nicht terminierende Dezimalentwicklung; kein exakt darstellbares dezimales Ergebnis"

Warum löst der folgende Code die unten gezeigte Ausnahme aus?

BigDecimal a = new BigDecimal("1.6");
BigDecimal b = new BigDecimal("9.2");
a.divide(b) // results in the following exception.

Eine Ausnahme:

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

6voto

Jorge Santos Neill Punkte 1389

Es ist ein Problem der Rundung des Ergebnisses, die Lösung für mich ist die folgende.

divider.divide(dividend,RoundingMode.HALF_UP);

3voto

Poorna Chander Punkte 63

Antwort für BigDecimal throws ArithmeticException

public static void main(String[] args) {
        int age = 30;
        BigDecimal retireMentFund = new BigDecimal("10000.00");
        retireMentFund.setScale(2,BigDecimal.ROUND_HALF_UP);
        BigDecimal yearsInRetirement = new BigDecimal("20.00");
        String name = " Dennis";
        for ( int i = age; i <=65; i++){
            recalculate(retireMentFund,new BigDecimal("0.10"));
        }
        BigDecimal monthlyPension =   retireMentFund.divide(
                yearsInRetirement.divide(new BigDecimal("12"), new MathContext(2, RoundingMode.CEILING)), new MathContext(2, RoundingMode.CEILING));      
        System.out.println(name+ " will have £" + monthlyPension +" per month for retirement");
    }
public static void recalculate (BigDecimal fundAmount, BigDecimal rate){
        fundAmount.multiply(rate.add(new BigDecimal("1.00")));
    }

Fügen Sie das MathContext-Objekt in den Aufruf Ihrer Divide-Methode ein und passen Sie die Genauigkeit und den Rundungsmodus an. Dies sollte Ihr Problem beheben

3voto

Ojda Punkte 39

Ihr Programm weiß nicht, welche Genauigkeit es für Dezimalzahlen verwenden soll, und gibt daher einen Fehler aus:

java.lang.ArithmeticException: Non-terminating decimal expansion

Lösung zur Umgehung der Ausnahme:

MathContext precision = new MathContext(int setPrecisionYouWant); // example 2
BigDecimal a = new BigDecimal("1.6",precision);
BigDecimal b = new BigDecimal("9.2",precision);
a.divide(b) // result = 0.17

1voto

Anh Ta Punkte 31

Für mich ist das die Arbeit mit dem hier:

BigDecimal a = new BigDecimal("9999999999.6666",precision);
BigDecimal b = new BigDecimal("21",precision);

a.divideToIntegralValue(b).setScale(2)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X