Вы можете использовать MessageFormat
, в частности его ChoiceFormat
особенность:
double[] nums = {
-876.123, -0.1, 0, +.5, 100, 123.45678,
};
for (double num : nums) {
System.out.println(
num + " " +
MessageFormat.format(
"{0,choice,-1#negative|0#zero|0<{0,number,'#,#0.000'}}", num
)
);
}
Это печатает:
-876.123 negative
-0.1 negative
0.0 zero
0.5 0.500
100.0 1,00.000
123.45678 1,23.457
Обратите внимание, что MessageFormat
использует DecimalFormat
под капотом. С документация :
FORMAT TYPE: number
FORMAT STYLE: subformatPattern
SUBFORMAT CREATED: new DecimalFormat(
subformatPattern,
DecimalFormatSymbols.getInstance(getLocale())
)
Так что использует DecimalFormat
, хотя и косвенно. Если это по какой-то причине запрещено, то вы должны самостоятельно проверить наличие специального условия, поскольку DecimalFormat
не различает ноль. С документация :
Шаблоны
DecimalFormat
имеют следующий синтаксис:
Pattern:
PositivePattern
PositivePattern ; NegativePattern
Нет возможности предоставить специальный шаблон для нуля, поэтому нет шаблона DecimalFormat
, который мог бы сделать это для вас. Вы можете либо, скажем, проверить if
, либо просто позволить MessageFormat/ChoiceFormat
сделать это за вас, как показано выше.