Двойная переменная Javafx с двумя десятичными знаками - PullRequest
0 голосов
/ 04 июня 2018

У меня есть имя переменной "unitPrice", которая является двойной.если значение единицы цены = 12,23;это нормально и дает двойную точность с двумя десятичными разрядами.

Однако, если значение равно unitPrice = 12.50;или unitPrice = 12.00;

это дает "12.5" и "12.0", есть ли способ сделать это "12.50" и "12.00"?

вот мой код для этого.

unitPrice = 12.00;
        DecimalFormat df2 = new DecimalFormat(".##");

    double formatDecimal = new Double(df2.format(unitPrice)).doubleValue();

Заранее спасибо.

1 Ответ

0 голосов
/ 04 июня 2018
Переменная

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());
            }
        })

;

...