J'essaie de formater une chaîne pour ajouter des virgules entre 3 groupes de chiffres
PAR EXEMPLE:
1200.20 >> 1,200.20
15000 >> 15,000
J'essaie de comprendre comment faire avec DecimalFormat. À ce stade, j'utilise un script qui me semble trop compliqué. Je n'arrive pas à comprendre comment faire. Utiliser # masque simplement les zéros à la fin et utiliser 0 les ajoute au nombre.
C'est ce que j'essaie en ce moment:
DecimalFormat df = new DecimalFormat("###,###.####", new DecimalFormatSymbols(Locale.US));
resultStr = df.format(Double.valueOf(resultStr));
Je suis sûr que cela doit être facile mais je ne sais pas comment le faire. Je n'ai pas à le faire avec DecimalFormat, je pensais que ce serait le moyen le plus simple. Comment puis-je simplement ajouter les virgules sans modifier les décimales?
Vous devez utiliser un objet NumberFormat et le définir pour utiliser le regroupement. Quelque chose comme
import Java.text.DecimalFormat;
import Java.text.NumberFormat;
import Java.util.Locale;
public class NumberFormatEg {
public static void main(String[] args) {
NumberFormat myFormat = NumberFormat.getInstance();
myFormat.setGroupingUsed(true);
double[] numbers = { 11220.00, 232323232.24, 121211.55, 102.121212 };
for (double d : numbers) {
System.out.println(myFormat.format(d));
}
System.out.println();
DecimalFormat decimalFormat = new DecimalFormat("#.00");
decimalFormat.setGroupingUsed(true);
decimalFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(decimalFormat.format(d));
}
System.out.println("\nFor Germany");
NumberFormat anotherFormat = NumberFormat
.getNumberInstance(Locale.GERMAN);
if (anotherFormat instanceof DecimalFormat) {
DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
anotherDFormat.applyPattern("#.00");
anotherDFormat.setGroupingUsed(true);
anotherDFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(anotherDFormat.format(d));
}
}
System.out.println("\nFor US:");
anotherFormat = NumberFormat.getNumberInstance(Locale.US);
if (anotherFormat instanceof DecimalFormat) {
DecimalFormat anotherDFormat = (DecimalFormat) anotherFormat;
anotherDFormat.applyPattern("#.00");
anotherDFormat.setGroupingUsed(true);
anotherDFormat.setGroupingSize(3);
for (double d : numbers) {
System.out.println(anotherDFormat.format(d));
}
}
}
}
qui retourne:
11,220
232,323,232.24
121,211.55
102.121
11,220.00
232,323,232.24
121,211.55
102.12
For Germany
11.220,00
232.323.232,24
121.211,55
102,12
For US:
11,220.00
232,323,232.24
121,211.55
102.12
Un avantage de ceci est que la solution peut être spécifique à l'environnement local.
Edité
Affiche maintenant un exemple avec un objet DecimalFormat. Notez que vous devez définir la taille du groupe si vous l'utilisez.
Vous pouvez aussi essayer quelque chose comme
DecimalFormat df = new DecimalFormat("#,###.00");
System.out.println(df.format(1200.20));
System.out.println(df.format(15000));
System.out.println(df.format(123456789.99));
1 200,20 15,000.00 123,456,789.99
Vous devriez être capable de faire exactement ce que vous voulez:
http://docs.Oracle.com/javase/tutorial/i18n/format/decimalFormat.html
DecimalFormat myFormatter = new DecimalFormat("$###,###.###");
String output = myFormatter.format(12345.67);
System.out.println(value + " " + pattern + " " + output);
La solution la plus simple
Pourquoi n'utilisez-vous pas le virgule ,
avec printf
.
System.out.printf( "%,d\n", 58625 );// the d to accept decimal integer
System.out.printf( "%,.2f", 12345678.9 );// the f to accept folouting point and 2 to take only 2 digits
La sortie sera
58,625
12,345,678.90
Et la bonne nouvelle: le séparateur généré réellement utilisé is specific to the user’s locale
Je ne pouvais faire fonctionner aucune des autres solutions, certaines autour des décimales, certaines ajoutaient des zéros à la fin ou certaines supprimaient des zéros à la fin.
Je n'ai pas l'intention d'accepter ma propre réponse, mais je posterai mon script au cas où quelqu'un le jugerait utile.
public void(String str) {
int floatPos = str.indexOf(".") > -1 ? str.length() - str.indexOf(".") : 0;
int nGroups= (str.length()-floatPos-1-(str.indexOf("-")>-1?1:0))/3;
for(int i=0; i<nGroups; i++){
int commaPos = str.length() - i * 4 - 3 - floatPos;
str = str.substring(0,commaPos) + "," + str.substring(commaPos,str.length());
}
return str;
}
1 => 1
1.0 => 1.0
1234.01 => 1,234.01
1100100.12345 => 1,100,100.12345