web-dev-qa-db-fra.com

Conversion d'un entier en chaîne avec une virgule pour des milliers

Je veux convertir un Integer 35634646 pour avoir le millier "," il devrait donc être 35,634,646.

Quel serait le moyen le plus rapide de le faire?

163
Dominik
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646
265
Eng.Fouad

Vous demandez le plus rapide, mais peut-être voulez-vous dire "meilleur", "correct" ou "typique"?

Vous demandez également que les virgules indiquent des milliers, mais vous voulez peut-être dire "sous une forme lisible par l'homme, conformément à la coutume locale de votre utilisateur"?

Vous le faites comme ça:

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

Les Américains obtiendront "35,634,646"

Les Allemands recevront "35.634.646"

Les Suisses allemands recevront "35'634'646"

142
Steve McLeod
int bigNumber = 1234567;
String formattedNumber = String.format("%,d", bigNumber);
78
mopsled

Entiers:

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

Doubles:

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

String.format est assez puissant.

- Édité par psuzzi feedback.

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

OUTPUT : 35,634,646

20
Bala R

Les autres réponses sont correctes, mais vérifiez bien les paramètres régionaux avant d’utiliser "%,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);

Résultat:

35,634,646
35 634 646
15

Cette solution a fonctionné pour moi:

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

Utilisez le spécificateur de format %d avec une virgule: %,d

C'est de loin le moyen le plus simple.

2
Annie Johnson

voici une solution pour ceux d'entre vous qui ne peuvent pas accéder à "numberformat" ni à "String.format" (en utilisant une version limitée de Java dans un framework). J'espère que c'est 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
1
user1807050

Si la même chose doit être faite dans le JSP, utilisez:

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

ofcourse for multiple values ​​use:

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

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