[JAVA] Wie man Big Decimal benutzt

Ich habe Code geschrieben, um mit Brüchen umzugehen, und ich bin auf verschiedene Arten darauf gekommen, also ein Memo zu dieser Zeit.

Was ist passiert

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.

Was ist passiert

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.

Was soll ich machen

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?

Weitere Anpassung

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

Wie man Big Decimal benutzt
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Wie benutzt man active_hash! !!
Verwendung von MapStruct
Verwendung von TreeSet
[Verwendung des Etiketts]
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von Ruby return
[Rails] Verwendung von Enum
Verwendung von @Builder (Lombok)
Verwendung der Java-Klasse
[Java] Verwendung von removeAll ()
Verwendung von String [] args
Verwendung von Rails Join
Verwendung von Java Map
[Java] Big Decimal richtig verwenden ~ 2018 ~
Ruby: Wie man Cookies benutzt
Verwendung von abhängigen :: zerstören
Verwendung von Eclipse Debug_Shell
Verwendung von Apache POI
[Rails] Verwendung der Validierung
Verwendung von Java-Variablen
[Rails] So verwenden Sie authenticate_user!
Verwendung von GC Viewer
Wie man Lombok jetzt benutzt
[Erstellen] Verwendung von JUnit
[Schienen] Verwendung von Scope
Verwendung der link_to-Methode
[Rails] Wie man Edelstein "devise" benutzt
Wie man Lombok im Frühling benutzt
Verwendung von StringBurrer und Arrays.toString.
Verwendung des Arrays (persönliches Memorandum)
Verwendung von HttpClient (Get) von Java