Граница подшаблона DecimalFormat не работает правильно - PullRequest
5 голосов
/ 17 февраля 2011

Я использую 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 сохраняется. Что я делаю неправильно? Я неправильно понимаю, для чего ;? 1016 *

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Помогает ли вам следующий шаблон строки: "%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 цифр, т.е. не подходит?

4 голосов
/ 17 февраля 2011

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

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

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

...