Risposte:
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
,
, tuttavia ci sono anche regioni che usano .
invece per raggruppare. In una parola, la codifica hard di una locale è considerata una cattiva pratica.
Locale.getCurrent()
è la soluzione
Chiedete il più veloce, ma forse intendete "migliore" o "corretto" o "tipico"?
Chiedete anche virgole per indicarne migliaia, ma forse intendete "in normale forma leggibile dall'uomo secondo l'usanza locale dell'utente"?
Lo fai così:
int i = 35634646;
String s = NumberFormat.getIntegerInstance().format(i);
Gli americani riceveranno "35.634.646"
I tedeschi riceveranno "35.634.646"
I tedeschi svizzeri riceveranno "35'634'646"
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
Interi:
int value = 100000;
String.format("%,d", value); // outputs 100,000
Doppio:
double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31
String.format è piuttosto potente.
- Modificato per feedback psuzzi .
String.format
. Comincia con return new Formatter(l) ...
ecc. Quindi l'argomento del Garbage Collector non è così forte come sembra.
int value = 35634646;
DecimalFormat myFormatter = new DecimalFormat("#,###");
String output = myFormatter.format(value);
System.out.println(output);
Produzione: 35,634,646
#,###
, se si desidera la formattazione in stile europeo, è possibile utilizzare #,##,###
.
,
.
Le altre risposte sono corrette, tuttavia ricontrolla le impostazioni locali prima di utilizzare "%,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);
Risultato:
35,634,646
35 634 646
Utilizzare l' %d
identificatore di formato con una virgola:%,d
Questo è di gran lunga il modo più semplice.
Se lo stesso deve essere fatto nel JSP, utilizzare:
<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>
ofcourse per più valori utilizzare:
<c:forEach items="${yourlist}" var="yourlist">
<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>
</c:forEach>
ecco una soluzione per quelli di voi che non possono accedere a "numberformat" né a "String.format" (usando una versione limitata di java all'interno di un framework). Spero sia utile.
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
usa l'estensione
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)
risultato
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
non puoi usare a
System.out.printf("%n%,d",int name);
La virgola in printf
dovrebbe aggiungere le virgole all'interno %d
.
Non positivo, ma funziona per me.
import java.text.NumberFormat;
.