NumberFormat.getCurrencyInstance(myLocale)
を使用して、指定されたロケールのカスタム通貨形式を取得しています。ただし、これには常に不要な通貨記号が含まれます。通貨記号なしの特定のロケールに適切な通貨番号形式が必要です。
format.setCurrencySymbol(null)
を実行すると、例外がスローされます。
次の作品。少しいですが、契約を満たします:
NumberFormat nf = NumberFormat.getCurrencyInstance();
DecimalFormatSymbols decimalFormatSymbols = ((DecimalFormat) nf).getDecimalFormatSymbols();
decimalFormatSymbols.setCurrencySymbol("");
((DecimalFormat) nf).setDecimalFormatSymbols(decimalFormatSymbols);
System.out.println(nf.format(12345.124).trim());
通貨形式からパターンを取得し、通貨記号を削除し、新しいパターンから新しい形式を再構築することもできます。
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));
代わりに空の文字列で設定してください:
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
与えられた解決策は機能しましたが、たとえばユーロのためにいくつかの空白を残してしまいました。私はやった:
numberFormat.format(myNumber).replaceAll("[^0123456789.,]","");
これにより、通貨やその他の記号を含まない数値の通貨書式設定が確実に行われます。
おそらく、単にreplaceまたはsubstringを使用して、フォーマットされた文字列の数字部分を取得することができます。
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
ツーラインアンサー
NumberFormat formatCurrency = new NumberFormat.currency(symbol: "");
var currencyConverted = formatCurrency.format(money);
TextViewで
new Text('${formatCurrency.format(money}'),
_DecimalFormat df = new DecimalFormat();
df.setMinimumFractionDigits(2);
String formatted = df.format(num);
_
num
の多くのタイプで動作しますが、 BigDecimalで通貨を表す を忘れないでください。
num
が小数点以下2桁を超えることができる状況では、df.setMaximumFractionDigits(2)
を使用して2つだけを表示できますが、応用。