web-dev-qa-db-ja.com

先頭に記号を付けて数値をフォーマットする

Java先頭の符号付きの数値をフォーマットするにはどうすればよいですか?

負の数は先頭の-で正しく表示されますが、明らかに正の数は+で表示されません。

Javaでそれを行う方法は?現在の通貨フォーマット文字列は\#\#\#,\#\#\#,\#\#\#,\#\#\#,\#\#0.00です(はい、正/負の通貨値をフォーマットする必要があります)

DecimalFormatのjavadoc で説明されているように、負のサブパターンを使用します。

DecimalFormat fmt = new DecimalFormat("+#,##0.00;-#");
System.out.println(fmt.format(98787654.897));
System.out.println(fmt.format(-98787654.897));

(スペースがグループ化区切り文字であり、コンマが小数点区切り文字である私のフランス語ロケールで)を生成します:

+98 787 654,90
-98 787 654,90
60
JB Nizet

Formatter のAPIは例を提供します:

Formatter formatter = new Formatter();
System.out.println(formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E));
//e =    +2,7183
14

やった:

private NumberFormat plusMinusNF = new DecimalFormat("+#;-#");

Integer newBalance = (Integer) binds.get("newBalance");
bindsForUpdate.put("plusMinus", plusMinusNF.format(newBalance));

正の整数をフォーマットしたもの、例えば5から「+5」および負の整数、たとえば-7から「-7」(予想どおり)

7
t3az0r

ロケールに依存しない方法で行うには、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()は、すべてのシステムのすべてのロケールの値を返さない場合がありますが、主要なロケールでは機能するはずです(そして、それ自体で合理的なフォールバックがあるので、何もする必要はありません)

ageektrapped

ソース: マイナス記号で米ドルのマイナス額をフォーマットし、括弧ではなく(Java)

2
Mohamed Saligh