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

j'ai cette méthode un peu folle qui convertit des valeurs BigDecimal en de belles chaînes 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);
}

il cependant, produit également un soi-disant séparateur de groupement "," qui rend toutes mes valeurs sortent comme ceci:

xxx,xxx

j'ai besoin que le séparateur soit un point ou un point et pas une virgule. Quelqu'un sait-il comment accomplir ce petit exploit?

j'ai lu ceci et en particulier ce à la mort maintenant, mais je ne peux pas trouver un moyen d'obtenir ce fait. Est-ce que j'approche ça de la mauvaise façon? Est-il beaucoup plus élégante façon de faire cela? Peut-être même une solution qui tient compte des différentes représentations des numéros locaux, puisque la virgule serait parfaite selon les normes européennes.

173
demandé sur Kevin Panko 2011-02-20 02:11:23

6 réponses

vous pouvez modifier le séparateur soit en paramétrant une locale soit en utilisant le DecimalFormatSymbols .

si vous voulez que le séparateur de regroupement soit un point, vous pouvez utiliser une locale européenne:

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

vous pouvez aussi utiliser la classe DecimalFormatSymbols pour changer les symboles qui apparaissent dans les nombres formatés produits par la méthode format. Ces symboles comprennent le séparateur décimal, le séparateur de groupe, le signe moins, et le signe pour cent, entre autres:

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

currentLocale peut être obtenu sur place.getDefault() c'est à dire:

Locale currentLocale = Locale.getDefault();
275
répondu Chris 2017-09-19 18:46:01

L'Europe est énorme. Je ne suis pas sûr qu'ils utilisent le même format partout. Cependant cette ou cette réponse sera d'aide.

String 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);
String output = nf_out.format(val);

i. e. utilisez le bon emplacement.

12
répondu Reno 2017-07-27 07:51:29
public String getGermanCurrencyFormat(double value) {
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
    nf.setGroupingUsed(true);
    return "€ " + nf.format(value);
}
8
répondu Imran Khan 2016-03-11 08:35:03

BigDecimal ne semble pas respecter les paramètres locaux.

Locale.getDefault(); //returns sl_SI

Slovène locale doit avoir une virgule décimale. Suppose que j'ai eu d'étranges idées fausses concernant le nombre.

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

a.toPlainString() // returns "1.2" always

j'ai édité une partie de mon message qui n'avait aucun sens puisqu'il s'est avéré être dû à l'erreur humaine (j'ai oublié de commettre des données et je regardais la mauvaise chose).

comme BigDecimal peut être dit pour N'importe quel Java .toString() fonction. Je suppose que c'est bon à certains égards. La sérialisation par exemple ou le débogage. Il y a une représentation de chaîne unique.

aussi comme d'autres mentionnés en utilisant formatters fonctionne bien. Il suffit d'utiliser les formateurs, de même pour l'interface JSF, les formateurs font le travail correctement et sont au courant de la locale.

5
répondu Neikius 2012-03-27 07:20:02
String money = output.replace(',', '.');
3
répondu Thakhani Tharage 2016-03-09 22:53:35

il suffit de remplacer '.'avec', ' à la fin de L'UI

import java.text.DecimalFormat;
public MyClass{
    private String 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 String getAmount() {
        //replacing decimal point with  comma so that in JSP ELs you'll get it in comma format
        return amount.replace(".",",");
    }
    public void setAmount(String amount) {
        this.amount = amount;
    }
}
-2
répondu ShAkKiR 2016-06-25 05:41:05