So trennen Sie Double in Integer- und Decimal-Teile

1. Übersicht

In diesem Tutorial werden verschiedene Methoden zum Trennen von Ganzzahl- und Dezimalteilen von Gleitkommatypen in Java untersucht, nämlich Float und Double .

2. Probleme mit Gleitkommatypen

Beginnen wir mit einem einfachen Bruchteil und einer naiven Art, die Trennung durch Casting durchzuführen:

double doubleNumber = 24.04; int intPart = (int) doubleNumber; System.out.println("Double Number: " + doubleNumber); System.out.println("Integer Part: " + intPart); System.out.println("Decimal Part: " + (doubleNumber - intPart));

Wenn wir versuchen, den obigen Code auszuführen, erhalten wir Folgendes:

Double Number: 24.04 Integer Part: 24 Decimal Part: 0.03999999999999915

Entgegen unserer Erwartung wird bei der Ausgabe der Dezimalteil nicht korrekt gedruckt. Daher sind die Gleitkommazahlen nicht für Berechnungen geeignet, bei denen Rundungsfehler nicht toleriert werden können.

3. Erster Ansatz: Teilen des Strings

Lassen Sie uns zunächst die Dezimalzahl in ein String- Äquivalent konvertieren . Dann können wir den String am Dezimalpunktindex teilen .

Lassen Sie uns dies anhand eines Beispiels verstehen:

double doubleNumber = 24.04; String doubleAsString = String.valueOf(doubleNumber); int indexOfDecimal = doubleAsString.indexOf("."); System.out.println("Double Number: " + doubleNumber); System.out.println("Integer Part: " + doubleAsString.substring(0, indexOfDecimal)); System.out.println("Decimal Part: " + doubleAsString.substring(indexOfDecimal)); 

Die Ausgabe des obigen Codes lautet:

Double Number: 24.04 Integer Part: 24 Decimal Part: .04

Die Ausgabe ist genau das, was wir erwarten. Das Problem hierbei ist jedoch die Einschränkung der Verwendung eines Strings - was bedeutet, dass wir jetzt keine anderen arithmetischen Operationen ausführen können.

4. Zweiter Ansatz: Verwenden von BigDecimal

Die BigDecimal- Klasse in Java bietet dem Benutzer die vollständige Kontrolle über das Rundungsverhalten. Diese Klasse bietet auch Operationen für Arithmetik, Skalenmanipulation, Rundung, Vergleich, Hashing und Formatkonvertierung.

Verwenden wir BigDecimal , um die ganzzahligen und dezimalen Teile einer Gleitkommazahl abzurufen:

double doubleNumber = 24.04; BigDecimal bigDecimal = new BigDecimal(String.valueOf(doubleNumber)); int intValue = bigDecimal.intValue(); System.out.println("Double Number: " + bigDecimal.toPlainString()); System.out.println("Integer Part: " + intValue); System.out.println("Decimal Part: " + bigDecimal.subtract( new BigDecimal(intValue)).toPlainString());

Die Ausgabe wird sein:

Double Number: 24.04 Integer Part: 24 Decimal Part: 0.04

Wie wir oben sehen können, ist die Ausgabe wie erwartet. Wir können auch arithmetische Operationen mit Hilfe der in der BigDecimal- Klasse bereitgestellten Methoden ausführen .

5. Schlussfolgerung

In diesem Artikel haben wir verschiedene Methoden zum Trennen von Ganzzahl- und Dezimalteilen von Gleitkommatypen erläutert. Wir haben auch die Vorteile der Verwendung von BigDecimal für Gleitkommaberechnungen erörtert .

In unserem ausführlichen Tutorial zu BigDecimal und BigInteger in Java werden weitere Merkmale und Verwendungsszenarien der beiden Klassen erläutert.

Schließlich ist der vollständige Quellcode für dieses Tutorial auf GitHub verfügbar.