J'ai cette petite méthode folle qui convertit les valeurs BigDecimal en chaînes agréables et lisibles.
private String formatBigDecimal(BigDecimal bd){
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(3);
df.setMaximumFractionDigits(3);
df.setMinimumIntegerDigits(1);
df.setMaximumIntegerDigits(3);
df.setGroupingSize(20);
return df.format(bd);
}
Cependant, il produit également un soi-disant séparateur de regroupement ","
qui fait sortir toutes mes valeurs comme ceci:
xxx,xxx
J'ai besoin que le séparateur soit un point ou un point et non une virgule. Quelqu'un a une idée de la façon d'accomplir ce petit exploit?
J'ai lu ceci et en particulier ceci à mort maintenant mais je ne peux pas trouver une manière de faire ceci. Suis-je en train de l'aborder de la mauvaise façon? Existe-t-il une manière beaucoup plus élégante de procéder? Peut-être même une solution qui prend en compte différentes représentations de nombres locaux, car la virgule serait parfaite selon les normes européennes.
java
android
bigdecimal
decimal-point
decimalformat
MiraFayless
la source
la source
Réponses:
Vous pouvez modifier le séparateur en définissant un paramètre régional ou en utilisant DecimalFormatSymbols .
Si vous souhaitez que le séparateur de regroupement soit un point, vous pouvez utiliser un paramètre régional européen:
Vous pouvez également utiliser la classe DecimalFormatSymbols pour modifier les symboles qui apparaissent dans les nombres formatés produits par la méthode de formatage. Ces symboles incluent le séparateur décimal, le séparateur de regroupement, le signe moins et le signe pourcentage, entre autres:
currentLocale peut être obtenu à partir de Locale.getDefault (), c'est-à-dire:
la source
String formatString = "#,###,###,##0.00";
voir docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html pour la syntaxeLocale.UK
ils reviendront1,567.90
et non 1.567,90NumberFormat.getNumberInstance()
peut fonctionner de manière inhabituellement lente sur certains appareils Android 7. Une alternative est celleString.format()
qui fonctionne rapidement. Voir stackoverflow.com/questions/2379221/java-currency-number-formatL'Europe est assez vaste. Je ne sais pas s'ils utilisent partout le même format. Cependant, telle ou telle réponse sera utile.
C'est à dire utiliser les paramètres régionaux corrects.
la source
la source
BigDecimal ne semble pas respecter les paramètres régionaux.
Les paramètres régionaux slovènes doivent avoir une virgule décimale. Je suppose que j'avais des idées fausses étranges concernant les chiffres.
J'ai édité une partie de mon message qui n'avait aucun sens car il s'est avéré être dû à l'erreur humaine (j'ai oublié de valider les données et je cherchais la mauvaise chose).
Identique à BigDecimal pour toutes les fonctions Java .toString (). Je suppose que c'est bon à certains égards. Sérialisation par exemple ou débogage. Il existe une représentation de chaîne unique.
De plus, comme d'autres l'ont mentionné, l'utilisation de formateurs fonctionne bien. Utilisez simplement des formateurs, de même pour le frontend JSF, les formateurs font le travail correctement et connaissent les paramètres régionaux.
la source
la source