Konvertieren von Integer in String mit Komma für Tausende


181

Ich möchte eine Ganzzahl 35634646 konvertieren, um die Tausend "" zu haben, also sollte es 35.634.646 sein.

Was wäre der schnellste Weg dazu?

Antworten:


289
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
Ich musste hinzufügen import java.text.NumberFormat;.
Mike S

6
Dies erzwingt die Gruppierung im US-Stil, die immer verwendet ,wird. Es gibt jedoch auch Regionen, die stattdessen .zur Gruppierung verwendet werden. Mit einem Wort, das Hardcodieren eines Gebietsschemas wird als schlechte Praxis angesehen.
Hai Zhang

4
@ DreaminginCode Um es gut zu machen, Locale.getCurrent()ist die Lösung
Roger RV

@ RogerRV Es gibt kein Locale.getCurrent () (zumindest auf Android)
E.Akio

Ja, dies ist nicht die beste Antwort für 96% der Menschen, die nicht in den USA leben
Abb.

152

Sie fragen nach dem Schnellsten, aber vielleicht meinen Sie "am besten" oder "richtig" oder "typisch"?

Sie fragen auch nach Kommas, um Tausende anzuzeigen, aber vielleicht meinen Sie "in normaler, von Menschen lesbarer Form gemäß der lokalen Gewohnheit Ihres Benutzers"?

Du machst es so:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

Amerikaner werden "35.634.646" bekommen

Deutsche bekommen "35.634.646"

Schweizer Deutsche bekommen "35'634'646"


Woher bekomme ich das Nummernmuster für jedes Gebietsschema? Ich habe versucht, den Code zu lesen, kann ihn aber nirgendwo finden
nhoxbypass


41

Ganzzahlen:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

Doppel:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

String.format ist ziemlich mächtig.

- Bearbeitet per psuzzi Feedback.


1
Vorteil: Nein "neu", lädt den Garbage Collector nicht auf (im Gegensatz zu DecimalFormat).
Contango

Schau mal rein String.format. Es beginnt mit return new Formatter(l) ...usw. Das Garbage Collector-Argument ist also nicht so stark, wie es scheint.
Scheintod

2
Dies ist meine Lieblingsantwort. Die Frage lautet, mit Integer zu arbeiten. Hier ist der Code: int value = 100000; String.format ("%, d", Wert);
Psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

Ausgabe: 35,634,646


1
Ihr Muster muss nicht größer sein als #,###, wenn Sie eine Formatierung im europäischen Stil wünschen, können Sie es verwenden #,##,###.
Ali

7
@Ali: Das von Ihnen beschriebene Format wird nur in Indien verwendet, und ich bin mir zu mindestens 90% sicher, dass Indien nicht in Europa ist.
Cairnarvon

Ich verstehe ... gut, wenn Sie eine indische Formatierung benötigen, dann machen Sie das so.
Ali

1
Dies ist vom Gebietsschema abhängig und führt nicht zur korrekten Ausgabe (gemäß Frage), wenn es ausgeführt wird, bei dem das Standardgebietsschema nicht Tausende durch a trennt ,.
Antak

17

Die anderen Antworten sind korrekt. Überprüfen Sie jedoch Ihr Gebietsschema, bevor Sie Folgendes verwenden "%,d":

Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Ergebnis:

35,634,646
35 634 646

3

Diese Lösung hat bei mir funktioniert:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));

3

Verwenden Sie den %dFormatbezeichner mit einem Komma:%,d

Dies ist bei weitem der einfachste Weg.


1

Wenn dasselbe in der JSP gemacht werden muss, verwenden Sie:

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

Natürlich für mehrere Werte verwenden:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>

1

Hier ist eine Lösung für diejenigen unter Ihnen, die weder auf "numberformat" noch auf "String.format" zugreifen können (unter Verwendung einer eingeschränkten Java-Version innerhalb eines Frameworks). Hoffe es ist nützlich.

number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();   
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0)    {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1;    }

formattedString

Überlegen Sie, ob Sie Ihre Antwort bearbeiten möchten, indem Sie Ihrem Code einige Kommentare hinzufügen (und ihn möglicherweise in eine Methode
einschließen

0

Verwenden Sie die Erweiterung

import java.text.NumberFormat

val Int.commaString: String
  get() = NumberFormat.getInstance().format(this)

val String.commaString: String
  get() = NumberFormat.getNumberInstance().format(this.toDouble())

val Long.commaString: String
  get() = NumberFormat.getInstance().format(this)

val Double.commaString: String
  get() = NumberFormat.getInstance().format(this)

Ergebnis

1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456

-1

Kannst du nicht ein

System.out.printf("%n%,d",int name);

Das Komma in printfsollte die Kommas in das einfügen%d Inter .

Nicht positiv, funktioniert aber für mich.


das kompiliert nicht für mich
Mishax

"Nicht positiv." Zwecklos.
Rob Shepherd

-8

Zuerst müssen Sie die JSTL-Tags einschließen: -

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

am Anfang der Seite

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.