Réponses:
Cela devrait fonctionner (non testé, basé sur JavaDoc):
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
Selon JavaDoc, le cast de la première ligne doit être enregistré pour la plupart des paramètres régionaux.
getDecimalFormatSymbols()dit: Returns: a copy of the desired DecimalFormatSymbols. Vous devriez donc utiliser setDecimalFormatSymbols(theCopy)après avoir modifié la copie.
newet le remettre au formateur: DecimalFormatSymbols customSymbol = new DecimalFormatSymbols(); customSymbol.setDecimalSeparator(decimalSeperator.charAt(0)); customSymbol.setGroupingSeparator(thousandSeperator); formatter.setDecimalFormatSymbols(customSymbol);
Vous pouvez utiliser la fonction de formatage avec ",";
int no = 124750;
String str = String.format("%,d", no);
//str = 124,750
"," inclut des caractères de regroupement spécifiques aux paramètres régionaux.
.comme séparateur?
format()avec une locale explicite ( Local.USest connu d'utiliser ,comme séparateur) puis remplacez ,votre séparateur personnalisé: String.format(Locale.US, "%,d", n).replace(',', '.').
int. Ou un long. Ou un BigInteger. Et utilisez f si vous souhaitez utiliser double, floatou BigDecimal.
BigDecimal bd = new BigDecimal(300000);
NumberFormat formatter = NumberFormat.getInstance(new Locale("en_US"));
System.out.println(formatter.format(bd.longValue()));
ÉDITER
Pour obtenir un séparateur de regroupement personnalisé tel que l'espace, procédez comme suit:
DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance();
symbols.setGroupingSeparator(' ');
DecimalFormat formatter = new DecimalFormat("###,###.##", symbols);
System.out.println(formatter.format(bd.longValue()));
NumberFormatobjet avec les propriétés souhaitées et vous l'utilisez pour formater votre fichier BigDecimal. A BigDecimaln'a qu'une valeur spécifiée, il n'a pas de format spécifié.
essayez ce code pour formater comme utilisé au Brésil:
DecimalFormat df = new DecimalFormat(
"#,##0.00",
new DecimalFormatSymbols(new Locale("pt", "BR")));
BigDecimal value = new BigDecimal(123456.00);
System.out.println(df.format(value.floatValue()));
// results: "123.456,00"
parameters.put("REPORT_LOCALE", new Locale("pt", "BR")); Envoyez ce paramètre au rapport.
Si vous utilisez un séparateur de milliers pour le type de données Integer, utilisez 1.
String.format ("%, d \ n", 58625) et la sortie sera 58 625
DecimalFormatSymbols formatSymbols = new DecimalFormatSymbols();
formatSymbols.setDecimalSeparator('|');
formatSymbols.setGroupingSeparator(' ');
String strange = "#,##0.###";
DecimalFormat df = new DecimalFormat(strange, formatSymbols);
df.setGroupingSize(4);
String out = df.format(new BigDecimal(300000).doubleValue());
System.out.println(out);
La réponse acceptée doit être vraiment modifiée sinon ne fonctionne pas. Le getDecimalFormatSymbols fait une copie défensive. Donc,
DecimalFormat formatter = (DecimalFormat) NumberFormat.getInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(bd.longValue()));
La nouvelle ligne est celle-ci: formatter.setDecimalFormatSymbols (symboles);
Pour les décimales :
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
DecimalFormat dfDecimal = new DecimalFormat("###########0.00###");
dfDecimal.setDecimalFormatSymbols(symbols);
dfDecimal.setGroupingSize(3);
dfDecimal.setGroupingUsed(true);
System.out.println(dfDecimal.format(number));
Comme mentionné ci-dessus, le lien suivant vous donne le code de pays spécifique pour permettre à Java de localiser le numéro. Chaque pays a son propre style.
Dans le lien ci-dessus, vous trouverez le code du pays qui doit être placé ici:
...(new Locale(<COUNTRY CODE HERE>));
La Suisse, par exemple, formate les nombres comme suit:
1 000,00 -> 1 000,00
Pour y parvenir, les codes suivants fonctionnent pour moi:
NumberFormat nf = NumberFormat.getNumberInstance(new Locale("de","CH"));
nf.setMaximumFractionDigits(2);
DecimalFormat df = (DecimalFormat)nf;
System.out.println(df.format(1000.00));
Le résultat est comme prévu:
1'000.00
public String formatStr(float val) {
return String.format(Locale.CANADA, "%,.2f", val);
}
formatStr(2524.2) // 2,254.20