Переменная
A double
не сохраняет точность, указанную с помощью DecimalFormat
.Объект DecimalFormat
используется для преобразования числа в String
в указанном вами формате (потому что вы назвали format()
).
Следовательно, df2.format(unitPrice)
будет оцениваться в String
иззначение "12.00"
.new Double("12.00")
создаст Double
со значением 12d
, а doubleValue()
просто вернет примитивное double
значение 12d
.
Кроме того, использование .##
означает, что значение будетбыть округлены до 2 десятичных знаков, но если у вас есть значение с менее чем 2 десятичными знаками, оно не будет иметь 2 десятичных знака.
Форматирование используется, когда вам нужно, чтобы число было представлено как String
.
double price = 12;
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(price);
System.out.println(df.format(price));
Вывод:
12
12.00
Редактировать
Предполагается, что вы используете JavaFX (поскольку ваш вопрос изначально имел тег javafx
).
Один из способов - использовать setCellFactory()
(см. this ).
Другой способ - использовать setCellValueFactory()
.
@FXML private TableColumn<Foo, String> column;
column.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<Foo, String>, ObservableValue<String>>() {
DecimalFormat df = new DecimalFormat("#.00");
@Override
public ObservableValue<String> call(CellDataFeatures<Foo, String> param) {
return Bindings.createStringBinding(() -> {
return df.format(param.getValue().getPrice());
}, param.getValue().priceProperty());
}
})
;