フォーマット負のマイナス記号とUSDの量ではなく、ブラケット(ジャワ)
-
20-09-2019 - |
質問
どのように私はマイナス記号とマイナスUSD通貨値を印刷するNumberFormat.getCurrencyInstance()
を得るのですか?
解決 6
、私はいくつかの研究を行なったし、 ICUが提供する、より弾力性の解決策を見つけました>
NumberFormatter
.withLocale(...)
.unit(Currency.getInstance("USD"))
.sign(SignDisplay.AUTO) // "123", "0", and "-123"
.format(123)
.toString();
他のヒント
これは、ロケールに依存しない方法でそれを行うにはNumberFormat.getCurrencyInstance()
によって返されてDecimalFormatの少し調整が必要です。ここで私は(Androidの上でテスト)やったことだ。
DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-"); // or "-"+symbol if that's what you need
formatter.setNegativeSuffix("");
IIRCは、Currency.getSymbol()
は、すべてのシステムのすべてのロケールの値を返さないかもしれないが、それは主要なもののために働く必要があります(と私はそれが自分自身で合理的なフォールバックを持っていると思うので、あなたは何もする必要はありません)
このここで私は常にJavaクラスまたはFMTのいずれかを介して使用して終了です
DecimalFormat format = new DecimalFormat("$#,##0.00;$-#,##0.00");
String formatted = format.format(15.5);
これは、常に、少なくとも$ 0.00生成し、表示されたときに一貫性があります。また、必要に応じて数千人のseperatorsが含まれています。それはあなたの要求である場合は、ドル記号の前にマイナス記号を移動することができます。
それはあなた自身の DecimalFormat
<を作成するために、おそらく最善です/>デフォルトに頼るのではなく、特定のフォーマットをしたい場合。
の編集のあなたはおそらく、あなたの好みにそれをDecimalFormat
し、調整するために)(NumberFormat.getCurrencyInstanceの結果をキャストすることができます。
試します:
NumberFormat.getCurrencyInstance(Locale.CANADA);
NumberFormat.getCurrencyInstance(Locale.UK);
なぜPOIがExcelの通貨のフォーマットの最初のオプションをサポートすることを拒否私を超えています! "ここに画像の説明を入力し、" の
私はあなたの最後のセルの値は、通貨記号の導入により非数値となりますので、通貨のためのDecimalFormatを使用して好きではありません。大手金融機関のために働いている間、私はこのフォーマットの問題を解決する使命を帯びました。 POIは合理的であるとExcelのネイティブのオプションの包括的なサポートを持っていることを拒否しているため、この変更の核となるアイデアは、ですが、私は自分のコードに潜入し、コアでそれらの値を変更します。以下は、私の回避策です。
private static final String CURRENCY_FORMAT_OVERRIDE = "\"$\"#,##0.00_);-\"$\"#,##0.00";
private static final String CURRENCY_FORMAT_TARGET = "\"$\"#,##0.00_);(\"$\"#,##0.00)";
static { // static class level initializer
Field field = org.apache.poi.ss.usermodel.BuiltinFormats.class.getDeclaredField("_formats");
field.setAccessible(true);
String[] _formats = (String[])field.get(new org.apache.poi.ss.usermodel.BuiltinFormats());
for(int i = 0; i < _formats.length; ++i) {
if(_formats[i].equals(CURRENCY_FORMAT_TARGET)) {
_formats[i]=CURRENCY_FORMAT_OVERRIDE;
System.out.println("TAKE THAT, POI!!!");
}
}
}