Форматирование чисел с плавающей точкой
У меня есть переменная типа double
Мне нужно напечатать его с точностью до 3 десятичных знаков, но он не должен иметь конечных нулей...
например. я нуждаюсь
2.5 // not 2.500
2 // not 2.000
1.375 // exactly till 3 decimals
2.12 // not 2.120
Я пытался с помощью DecimalFormatter
, Я делаю это неправильно?
DecimalFormat myFormatter = new DecimalFormat("0.000");
myFormatter.setDecimalSeparatorAlwaysShown(false);
Благодарю.:)
3 ответа
Решение
Попробуйте шаблон "0.###"
вместо "0.000"
:
import java.text.DecimalFormat;
public class Main {
public static void main(String[] args) {
DecimalFormat df = new DecimalFormat("0.###");
double[] tests = {2.50, 2.0, 1.3751212, 2.1200};
for(double d : tests) {
System.out.println(df.format(d));
}
}
}
выход:
2.5
2
1.375
2.12
Ваше решение почти правильное, но вы должны заменить нули '0' в десятичном формате на хэши "#".
Так должно выглядеть так:
DecimalFormat myFormatter = new DecimalFormat("#.###");
И эта линия не является необходимой (как decimalSeparatorAlwaysShown
является false
по умолчанию):
myFormatter.setDecimalSeparatorAlwaysShown(false);
Вот краткое резюме от Javadocs:
Symbol Location Localized? Meaning
0 Number Yes Digit
# Number Yes Digit, zero shows as absent
И ссылка на Javadoc: DecimalFormat
Используйте класс NumberFormat.
Пример:
double d = 2.5; NumberFormat n = NumberFormat.getInstance(); n.setMaximumFractionDigits(3); System.out.println(n.format(d));
Выход будет 2.5, а не 2.500.