Форматирование чисел с плавающей запятой
У меня есть переменная типа 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);
Спасибо.:)
Ответы
Ответ 1
Попробуйте шаблон "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
Ответ 2
Ваше решение почти правильно, но вы должны заменить нули "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
Ответ 3
Использовать класс NumberFormat.
Пример:
double d = 2.5;
NumberFormat n = NumberFormat.getInstance();
n.setMaximumFractionDigits(3);
System.out.println(n.format(d));
Выход будет 2,5, а не 2.500.