Ich habe versucht, mit bigdecimal in Java zu runden und habe in einen java.lang.ArithmeticException-Fehler, der nicht-beendende Dezimal-Erweiterung zeigt, ausgeführt.Rundung mit BigDecimal?
Kann jemand die Ursprünge des Fehlers erklären, wie ich zu Java ziemlich neu bin? und hilf mir mit meinem Code?
Dank
protected BigDecimal p;
protected BigDecimal q;
protected BigDecimal d;
protected BigDecimal det;
protected BigDecimal exp;
protected int e;
this.p = pq.getP();
this.q = pq.getQ();
det = ((p.subtract(BigDecimal.ONE)).multiply(q.subtract(BigDecimal.ONE)));
exp = new BigDecimal(String.valueOf(e));
d = (det.divide(exp).setScale(2,BigDecimal.ROUND_HALF_UP));
Die Variable "d" ist, wo ich die Fehler glauben entstehen wird.
Seit 'e' ein' int' ist, 'neue BigDecimal (String.valueOf (e))' sollte [ 'BigDecimal.valueOf (e)'] sein (https://docs.oracle.com /javase/7/docs/api/java/math/BigDecimal.html#valueOf%28lang%29). – Andreas
@Andreas ersetzt das einfach den Wert, der von exp referenziert wird, anstatt einen neuen Referenzstandort zu erstellen und zusätzlichen Speicherplatz zu belegen? – TheLiquor
@TheLiquor Der Hauptgrund, da 'e' ein' int' ist, ist, dass das Konvertieren eines 'int' (oder' long') in ein BigDecimal einfach und schnell ist, aber * das 'int' zu einem String formatiert, dann * zu analysieren, dass zu einem BigDecimal ist langsam und verschwenderisch. – Andreas