web-dev-qa-db-fra.com

Format devise sans symbole monétaire

J'utilise NumberFormat.getCurrencyInstance(myLocale) pour obtenir un format de devise personnalisé pour une locale donnée par moi. Cependant, cela inclut toujours le symbole monétaire que je ne veux pas, je veux juste le format de numéro de devise approprié pour mes paramètres régionaux sans le symbole monétaire. 

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

53
anderswelt

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 motif du format monétaire, supprimer le symbole monétaire et reconstruire un nouveau format à partir du nouveau motif:

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));
50
JB Nizet

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
43
BalusC

Deux lignes réponse

NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);

Dans TextView

new Text('${formatCurrency.format(money}'),
0
Vijay Ankith

Peut-être pourrions-nous 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
0
Codingpan

La solution proposée a fonctionné, mais a finalement laissé des espaces blancs pour Euro, par exemple. J'ai fini par faire:

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

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

0
Quentin G.
DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);

Fonctionne avec plusieurs types pour num, mais n'oubliez pas de représenter la devise avec BigDecimal .

Pour les situations où votre num peut avoir plus de deux chiffres après le point décimal, vous pouvez utiliser df.setMaximumFractionDigits(2) pour n'en afficher que deux, mais cela ne pourrait que masquer un problème sous-jacent à quiconque exécute l'application.

0
Velizar Hristov