Форматирование числа с помощью знака
Как мне форматировать в Java число с его ведущим знаком?
Отрицательные числа отображаются правильно с ведущим -
, но, очевидно, положительные числа не отображаются с помощью +
.
Как это сделать на Java? Моя текущая строка формата валюты \#\#\#,\#\#\#,\#\#\#,\#\#\#,\#\#0.00
(да, мне нужно форматировать положительные/отрицательные значения валюты)
Ответы
Ответ 1
Используйте отрицательный подшаблон, как описано в javadoc для DecimalFormat.
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
Ответ 2
API для Formatter предоставляет пример:
Formatter formatter = new Formatter();
System.out.println(formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E));
//e = +2,7183
Ответ 3
Я сделал:
private NumberFormat plusMinusNF = new DecimalFormat("+#;-#");
Integer newBalance = (Integer) binds.get("newBalance");
bindsForUpdate.put("plusMinus", plusMinusNF.format(newBalance));
которые форматировали положительные целые числа, например. 5 до "+5" и отрицательных целых чисел, например от -7 до "-7" (как ожидалось)
Ответ 4
Для этого требуется небольшая настройка DecimalFormat, возвращаемое NumberFormat.getCurrencyInstance() - сделайте это в соответствии с локальностью. Вот что я сделал (протестировал на Android):
DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
String symbol = formatter.getCurrency().getSymbol();
formatter.setNegativePrefix(symbol+"-");
// or "-"+symbol if that what you need
formatter.setNegativeSuffix("");
IIRC, Currency.getSymbol() не может вернуть значение для всех локалей для всех систем, но он должен основные (и я думаю, что он имеет разумный резерв сам по себе, поэтому вы не должен ничего делать)
ageektrapped
Источник: Отформатируйте отрицательную сумму USD со знаком минус, а не скобками (Java)