So teilen Sie Double in Integer- und Dezimalteile auf

1. Überblick

In diesem Lernprogramm werden verschiedene Methoden zur Trennung von ganzzahligen und dezimalen Teilen von Gleitkommatypen in Java, nämlich float und double , beschrieben.

2. Probleme mit Gleitpunkttypen

Beginnen wir mit einem einfachen Bruch und einer naiven Art und Weise der Trennung durch Gießen:

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 druckt die Ausgabe den Dezimalteil nicht korrekt. Daher sind die Fließkommazahlen nicht für Berechnungen geeignet, bei denen Rundungsfehler nicht toleriert werden können.

3. Erster Ansatz: Aufteilen des String

Zuerst konvertieren wir die Dezimalzahl in ein String -Äquivalent.

Dann können wir den String am Dezimalpunktindex aufteilen.

Verstehen wir dies mit einem Beispiel:

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 bei der Verwendung eines Strings. Dies bedeutet, dass wir jetzt keine weiteren Rechenoperationen ausführen können.

4. Zweiter Ansatz: Verwenden von BigDecimal

Die Klasse BigDecimal in Java bietet dem Benutzer die vollständige Kontrolle über das Rundungsverhalten.

Diese Klasse stellt auch Operationen für Arithmetik, Skalenmanipulation, Rundung, Vergleich, Hashing und Formatkonvertierung bereit.

Verwenden Sie BigDecimal , um die ganzzahligen und dezimalen Teile einer Gleitkommazahl zu erhalten:

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 Klasse BigDecimal bereitgestellten Methoden ausführen.

5. Schlussfolgerung

In diesem Artikel haben wir verschiedene Methoden zum Trennen von Ganzzahl- und Dezimalteilen von Gleitkommatypen beschrieben. Wir haben auch die Vorteile der Verwendung von BigDecimal für Gleitkommaberechnungen diskutiert.

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

Schließlich ist der vollständige Quellcode für dieses Tutorial https://github.com/eugenp/tutorials/tree/master/core-java-langglich verfügbar auf GitHub.]