Ich habe Code geschrieben, um mit Brüchen umzugehen, und ich bin auf verschiedene Arten darauf gekommen, also ein Memo zu dieser Zeit.
Ich musste einen Bruchwert teilen, also schrieb ich den Code zum Teilen mit BigDecimal wie folgt.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal(1.1);
BigDecimal num2 = new BigDecimal(100);
System.out.println(num1.divide(num2));
}
}
Da es 1,1 ÷ 100 ist, sollte das Ergebnis 0,011 sein, aber wenn ich es ausführe, wird "0.01100000000000000088817841970012523233890533447265625" ausgegeben. Ich fragte mich warum, aber es wurde nicht richtig verwendet.
Ich habe 1.1 als Argument beim Generieren von BigDecimal verwendet, aber es scheint, dass dies bereits einen Fehler enthält. Da Dezimalbrüche durch binäre Brüche dargestellt werden, gibt es einige Werte, die überhaupt nicht ausgedrückt werden können. Wenn Sie darüber nachdenken, ist es natürlich. .. .. Da 1.1 ein Wert ist, der nicht ausgedrückt werden kann, bleibt der Fehler erhalten, wenn BigDecimal basierend darauf generiert wird.
Vermeiden Sie die Verwendung von Double- und Float-Werten wie unten gezeigt.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("100");
System.out.println(num1.divide(num2));
}
}
Dies gibt Ihnen eine genaue Berechnung. Benötigt BigDecimal dann einen Konstruktor, der doppelt als Argument dient?
ArithmeticException tritt auf, wenn ein unteilbarer Wert wie unten gezeigt berechnet wird.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("3");
System.out.println(num1.divide(num2));
}
}
Die Divisionsmethode von BigDecimal scheint eine Ausnahme auszulösen, wenn sie standardmäßig nicht teilbar ist. Geben Sie daher die Anzahl der Ziffern und die Rundungsmethode wie unten gezeigt an.
public class Divide {
public static void main(String[] args) {
BigDecimal num1 = new BigDecimal("1.1");
BigDecimal num2 = new BigDecimal("3");
System.out.println(num1.divide(num2,2,RoundingMode.FLOOR));
}
}
Recommended Posts