Граница подшаблона 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#)".