76 votes

Formater la devise sans symbole monétaire

J'utilise NumberFormat.getCurrencyInstance(myLocale) pour obtenir un format de devise personnalisé pour un paramètre régional que j'ai donné. Cependant, cela inclut toujours le symbole de devise que je ne veux pas, je veux juste le format de numéro de devise approprié pour mes paramètres régionaux donnés sans le symbole de devise.

Faire un format.setCurrencySymbol(null) lève une exception.

73voto

JB Nizet Points 250258

Les travaux suivants. C'est un peu moche, mais ça remplit le contrat :

 NumberFormat nf = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("");
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(nf.format(12345.124).trim());

Vous pouvez également obtenir le modèle à partir du format monétaire, supprimer le symbole monétaire et reconstruire un nouveau format à partir du nouveau modèle :

 NumberFormat nf = NumberFormat.getCurrencyInstance();
String pattern = ((DecimalFormat) nf).toPattern();
String newPattern = pattern.replace("\u00A4", "").trim();
NumberFormat newFormat = new DecimalFormat(newPattern);
System.out.println(newFormat.format(12345.124));

51voto

BalusC Points 498232

Définissez-le avec une chaîne vide à la place :

 DecimalFormat formatter = (DecimalFormat) NumberFormat.getCurrencyInstance(Locale.US);
DecimalFormatSymbols symbols = formatter.getDecimalFormatSymbols();
symbols.setCurrencySymbol(""); // Don't use null.
formatter.setDecimalFormatSymbols(symbols);
System.out.println(formatter.format(12.3456)); // 12.35

9voto

Gnzlt Points 613

Utilisez simplement NumberFormat.getInstance() au lieu de NumberFormat.getCurrencyInstance() comme suit :

 val numberFormat = NumberFormat.getInstance().apply {
    this.currency = Currency.getInstance()
}

val formattedText = numberFormat.format(3.4)

7voto

Quentin G. Points 190

La solution donnée a fonctionné mais a fini par laisser des espaces pour l'euro par exemple. J'ai fini par faire :

 numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");

Cela garantit que nous avons le formatage de la devise pour un nombre sans la devise ou tout autre symbole.

3voto

Codingpan Points 198

Peut-être que nous pouvons simplement utiliser replace ou substring pour prendre simplement la partie numérique de la chaîne formatée.

 NumberFormat fmt = NumberFormat.getCurrencyInstance(Locale.getDefault());
fmt.format(-1989.64).replace(fmt.getCurrency().getSymbol(), "");
//fmt.format(1989.64).substring(1);  //this doesn't work for negative number since its format is -$1989.64

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X