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.
new
et 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.US
est 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
, float
ou 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()));
NumberFormat
objet avec les propriétés souhaitées et vous l'utilisez pour formater votre fichier BigDecimal
. A BigDecimal
n'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