Javafx带有两位小数的双变量

时间:2018-06-04 00:59:15

标签: java double precision decimalformat

我有一个变量名称“unitPrice”,它是double。 如果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 :(得分:1)

double变量不存储您使用DecimalFormat指定的精度。 DecimalFormat对象用于将数字转换为您指定格式的String(因为您调用了format())。

因此,df2.format(unitPrice)会评估为String的值"12.00"new Double("12.00")会创建Double,其值为12d,而doubleValue()只会返回原始double12d

此外,使用.##表示该值将四舍五入到小数点后两位,但如果您的值小于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());
            }
        })