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?

Dominik
quelle

Antworten:

289
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
Eng.Fouad
quelle
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"

Steve McLeod
quelle
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.

Frankie
quelle
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

Bala R.
quelle
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
Grzegorz Szpetkowski
quelle
3

Diese Lösung hat bei mir funktioniert:

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

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

Dies ist bei weitem der einfachste Weg.

Annie Johnson
quelle
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>
Navankur Chauhan
quelle
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
user1807050
quelle
Ü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
Changhoon
quelle
-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.

Josh
quelle
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

Ankur
quelle