Граница подшаблона DecimalFormat не работает правильно

Я использую DecimalFormat для создания форматированного десятичного числа, которое всегда имеет длину 6 символов. Сначала я использовал формат строки new DecimalFormat("000.00") но это дало мне ошибку для отрицательных чисел. Знак минус добавляется и увеличивает номер один пробел, в результате чего -005.25 и не -05.25 по желанию.

Я смог исправить это с помощью следующего кода

DecimalFormat fmt;  
if(netAmt < 0){  
    fmt = new DecimalFormat("00.00");  
}else{  
    fmt = new DecimalFormat("000.00");  
}  

System.out.println(fmt.format(netAmt));

Но у DecimalFormat есть ; символ для форматирования отрицательных чисел иначе, чем положительные числа. Я не смог получить эту работу правильно. Насколько я понимаю, следующий код должен работать так же, как и выше.

DecimalFormat fmt = new DecimalFormat("000.00;00.00");  

System.out.println(fmt.format(netAmt));

В результате шаблон перед ; используется как для отрицательных, так и для положительных чисел, вызывающих -005.25 ошибка остаться. Что я делаю неправильно? Я неправильно понимаю, что ; для?

2 ответа

Решение

Помогает ли вам следующий шаблон строки: "%06.2f%n"Фиксированная ширина 6 с "0" отступом спереди?

пример

System.out.println(String.format("%06.2f%n",1.3));
System.out.println(String.format("%06.2f%n",-3.323));

Как вы хотите, чтобы поведение было, когда число больше 3 цифр, т.е. не подходит?

Я уверен, что второй шаблон игнорируется, и используются только те части, которые относятся к отрицанию, например, знак - или () и т. Д.

Это мое понимание прочтения следующего отрывка из JavaDocs

Шаблон DecimalFormat содержит положительный и отрицательный подшаблон, например, "#,##0.00;(#,##0.00)". Каждый подшаблон имеет префикс, числовую часть и суффикс. Отрицательный подшаблон необязательный; если отсутствует, положительный подшаблон с префиксом локализованного знака минус ('-' в большинстве локалей) используется как отрицательный подшаблон. То есть только "0,00" эквивалентно "0,00;-0,00". Если есть явный отрицательный подшаблон, он служит только для указания отрицательного префикса и суффикса; количество цифр, минимальные цифры и другие характеристики совпадают с положительным шаблоном. Это означает, что "#,##0.0#;(#)" ведет себя точно так же, как и "#,##0.0#;(#,##0.0#)".

Другие вопросы по тегам