Comment changer le séparateur décimal de DecimalFormat de virgule en point / point?

J’ai cette petite méthode folle qui convertit les valeurs BigDecimal en chaînes agréables et lisibles.

private Ssortingng 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 séparateur dit 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 at-il une idée de comment accomplir ce petit exploit?

J’ai lu ceci et en particulier ceci jusqu’à la mort maintenant, mais je ne peux pas trouver un moyen de le faire. Est-ce que je m’approche de la mauvaise façon? Y a-t-il une manière beaucoup plus élégante de le faire? Peut-être même une solution qui prend en compte différentes représentations de numéros locaux, car la virgule serait parfaite selon les normes européennes.

    Vous pouvez modifier le séparateur en définissant un paramètre régional ou en utilisant les symboles DecimalFormat .

    Si vous souhaitez que le séparateur de regroupement soit un point, vous pouvez utiliser un paramètre régional européen:

     NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); DecimalFormat df = (DecimalFormat)nf; 

    Vous pouvez également utiliser la classe DecimalFormatSymbols pour modifier les symboles apparaissant dans les nombres mis en forme produits par la méthode de format. Ces symboles incluent le séparateur décimal, le séparateur de regroupement, le signe moins et le signe de pourcentage, entre autres:

     DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale); otherSymbols.setDecimalSeparator(','); otherSymbols.setGroupingSeparator('.'); DecimalFormat df = new DecimalFormat(formatSsortingng, otherSymbols); 

    currentLocale peut être obtenu à partir de Locale.getDefault () à savoir:

     Locale currentLocale = Locale.getDefault(); 

    L’Europe est assez énorme. Je ne suis pas sûr qu’ils utilisent le même format partout. Cependant, ceci ou cette réponse sera utile.

     Ssortingng text = "1,234567"; NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY); double val = nf_in.parse(text).doubleValue(); NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK); nf_out.setMaximumFractionDigits(3); Ssortingng output = nf_out.format(val); 

    Ie utilise la locale correcte.

     public Ssortingng getGermanCurrencyFormat(double value) { NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN); nf.setGroupingUsed(true); return "€ " + nf.format(value); } 

    BigDecimal ne semble pas respecter les parameters régionaux.

     Locale.getDefault(); //returns sl_SI 

    La langue slovène doit avoir une virgule décimale. Je suppose que j’ai eu des idées fausses étranges concernant les nombres.

     a = new BigDecimal("1,2") //throws exception a = new BigDecimal("1.2") //is ok a.toPlainSsortingng() // returns "1.2" always 

    J’ai édité une partie de mon message qui n’avait aucun sens, car elle était due à une erreur humaine (j’ai oublié de commettre des erreurs et des erreurs).

    Même chose que BigDecimal peut être dit pour toutes les fonctions Java .toSsortingng (). Je suppose que c’est bon à certains égards. Sérialisation par exemple ou débogage. Il y a une représentation de chaîne unique.

    En outre, comme d’autres utilisateurs l’utilisent, cela fonctionne bien. Utilisez simplement des formateurs, comme pour le frontal JSF, les formateurs font le travail correctement et connaissent les parameters régionaux.

     Ssortingng money = output.replace(',', '.'); 

    Remplacez simplement ‘.’ avec ‘,’ dans la fin de l’interface utilisateur

     import java.text.DecimalFormat; public MyClass{ private Ssortingng netAmount; private static DecimalFormat twoDecimalForm = new DecimalFormat("00.00"); public MyClass(double amount){ //converting to required decimal format in constructor or/and setter this.amount=twoDecimalForm.format(amount); } public Ssortingng getAmount() { //replacing decimal point with comma so that in JSP ELs you'll get it in comma format return amount.replace(".",","); } public void setAmount(Ssortingng amount) { this.amount = amount; } }