2013-04-22 3 views
0

Я хочу отформатировать число без префикса (или того же префикса) для положительных и отрицательных чисел.Java NumberFormat с эквивалентным отрицательным и положительным рисунком

В спецификации NumberFormat указано, что вы можете указать поднабор для положительных чисел и дополнительный шаблон для отрицательных чисел, разделенных точкой с запятой.

Каждый подшаблон имеет префикс, числовую часть и суффикс. Отрицательный подшаблон является необязательным; если отсутствует, то положительный подшаблон с префиксом локализованного знака минус ('-' в большинстве мест) используется как как отрицательный подшаблон. То есть, только «0,00» эквивалентно «0,00; -0,00».

Это работает до тех пор, пока положительные и отрицательные подформы имеют различные префиксы или суффиксы. Если они совпадают, по умолчанию используется поведение по умолчанию со знаком минус.

То, что я хочу, это формат:

  • +1 как: 01
  • -1 как: 01

Я знаю, что я могу использовать Math.abs(), который не так просто в среде JSP/EL, и это чистая проблема форматирования, поэтому это должно быть сделано в JSP, но это не совсем так. Я не мог найти никакого намека на документацию об этом поведении. Когда я прочитал выше, я думаю, что как только я укажу какой-либо отрицательный поднабор, он будет использоваться. Это не так.

Кто-нибудь знает что-нибудь об этом? Я могу записать ошибку с Oracle, но сначала хочу проверить, если я что-то упустил.

ответ

1

Не уверен, что именно ваш формат должен быть, но это, кажется, работает для вашего примера:

DecimalFormat f = new DecimalFormat(":00"); 
f.setNegativePrefix(":"); 
System.out.println(f.format(1)); // :01 
System.out.println(f.format(-1)); // :01 
+0

Hi Peter, спасибо. Хороший момент, я не знал об этом методе. Однако, как я уже сказал, я хочу сделать это в JSP (без скриптлета), и мне показалось, что подзадача с точкой с запятой должна быть хитростью. Я все еще думаю, что это ошибка. Очевидно, что ошибка заключается в анализе и применении шаблона к внутренним структурам, а не в логике вывода. – marc82ch

1

Если предположить, что у вас есть JSTL в вашем wepapp, вы можете использовать следующее:

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> 
<fmt:formatNumber pattern=":#" minIntegerDigits="2" value="${fn:replace('-1', '-', '')}" /> 

Надеюсь, что эта помощь ...

+0

Спасибо Гийому, это хороший обходной путь, но все же вроде хак, нет? Я сделал что-то подобное сейчас, но все еще интересно, если это ошибка? – marc82ch

Смежные вопросы