Konvertiere Double in String, Entferne Dezimalstellen

1. Einführung

In diesem Tutorial werfen wir einen Blick auf die verschiedenen Möglichkeiten, einen double -Wert in einen String -Wert zu konvertieren, und dessen Dezimalstellen zu entfernen.

Wir werden sehen, wie das geht, wenn wir nur den Dezimalteil abschneiden und abrunden wollen.

2. Kürzung mit Casting

Wenn Ihr double -Wert innerhalb des int -Bereichs liegt, können wir ihn in int _ umwandeln. _ Die Besetzung schneidet den Dezimalteil ab, was bedeutet, dass er ohne Rundung abgeschnitten wird.

  • Dieser Ansatz ist etwa zehnmal so schnell wie die anderen Ansätze, die wir uns ansehen werden. **

Wenn es sich um ein int, handelt, können wir es an die valueOf -Methode in der String -Klasse übergeben:

String truncated = String.valueOf((int) doubleValue);

Wir können diesen Ansatz sicher anwenden, wenn uns garantiert wird, dass https://www.baeldung.com/java-primitives der doppelte Wert im Bereich eines int__]liegt. Aber wenn unser Wert den Wert übersteigt, funktioniert das Casting nicht so, wie wir es wollen .

3. Rundung mit String.format ()

Nun sind die verbleibenden Ansätze nicht so beschränkt wie das Casting, aber sie haben ihre eigenen Nuancen.

Ein anderer Ansatz besteht beispielsweise darin, die format -Methode der String -Klasse zu verwenden. Der erste Parameter der Methode gibt an, dass ein Gleitkommawert mit Nullstellen nach dem Dezimalzeichen formatiert wird:

String rounded = String.format("%.0f", doubleValue);
  • Die format -Methode verwendet __HALF UP ____rounding ** , die aufgerundet wird, wenn der Wert nach dem Bruchteil 0,5 oder mehr ist. Andernfalls wird die Zahl vor dem Dezimalzeichen zurückgegeben.

String.format ist der einfachste Weg, dies zu tun .

4. NumberFormat.format () verwenden

Die NumberFormat -Klasse bietet auch eine format -Methode, die der String -Klasse ähnelt, aber _ NumberFormat _ ist schneller und mit ihr können wir den Rundungsmodus angeben, um entweder eine Abschneidung oder eine Rundung zu erzielen.

Die Methode setMaximumFractionDigits () teilt dem Formatierer mit, wie viele Nachkommastellen nach dem Dezimalzeichen in die Ausgabe aufgenommen werden:

NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(0);
String rounded = nf.format(doubleValue);
  • Merkwürdigerweise verwendet NumberFormat nicht standardmäßig HALF UP . Stattdessen wird standardmäßig HALF EVEN Rundung verwendet. Dies bedeutet, dass es wie gewohnt rundet, mit Ausnahme von .5, . In diesem Fall wählt es die nächste gerade Zahl ** .

  • Während HALF EVEN bei der statistischen Analyse hilfreich ist, verwenden wir HALF UP , um konsistent zu sein:

nf.setRoundingMode(RoundingMode.HALF__UP);
String rounded = nf.format(doubleValue);

Und können wir dies ändern und eine Verkürzung erreichen, indem Sie das Formatierungsprogramm anstelle des FLOOR -Rundungsmodus setzen:

nf.setRoundingMode(RoundingMode.FLOOR);
String truncated = nf.format(doubleValue)

Und jetzt wird es abgeschnitten statt rund.

5. DecimalFormat.format () verwenden

Ähnlich wie NumberFormat kann die DecimalFormat -Klasse zum Formatieren von double -Werten verwendet werden. Anstatt jedoch das Ausgabeformat mit Methodenaufrufen festzulegen, können Sie dem Formatierer mitteilen, welche Ausgabe wir wollen, indem Sie dem Konstruktor ein bestimmtes Muster geben: **

DecimalFormat df = new DecimalFormat("#,###");
df.setRoundingMode(RoundingMode.HALF__UP);
String rounded = df.format(doubleValue);

Das Muster " , # #" bedeutet, dass der Formatierer nur den ganzzahligen Teil der Eingabe zurückgeben soll. Es signalisiert auch, dass wir möchten, dass die Ziffern in drei durch ein Komma getrennte Ziffern gruppiert werden.

Die gleichen Rundungsvorgaben gelten hier. Wenn Sie einen abgeschnittenen Wert ausgeben möchten, können Sie den Rundungsmodus auf FLOOR setzen:

df.setRoundingMode(RoundingMode.FLOOR);
String truncated = df.format(doubleValue)

6. BigDecimal.toString () verwenden

Der letzte Ansatz, den wir betrachten werden, ist BigDecimal , den wir einbeziehen werden, weil er NumberFormat und DecimalFormat für größere double __s übertrifft.

Wir können BigDecimal 's __setScale __method verwenden, um festzustellen, ob wir abrunden oder abschneiden wollen:

double largeDouble = 345__345__345__345.56;
BigDecimal big = new BigDecimal(largeDouble);
big = big.setScale(0, RoundingMode.HALF__UP);
  • Denken Sie daran, dass __BigDecimal __s unveränderlich sind, so dass wir wie Strings den Wert zurücksetzen müssen. **

Und dann rufen wir BigDecimal ’s toString einfach an:

String rounded = big.toString();

7. Fazit

In diesem Tutorial haben wir die verschiedenen Möglichkeiten untersucht, wie wir ein double in einen String konvertieren und dabei Dezimalstellen entfernen können. Wir haben Ansätze bereitgestellt, die entweder gerundete oder abgeschnittene Werte ausgeben.

Wie üblich sind die Beispiele und Benchmarks verfügbar: über GitHub .