我有一个变量名称“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();
提前致谢。
答案 0 :(得分:1)
double
变量不存储您使用DecimalFormat
指定的精度。 DecimalFormat
对象用于将数字转换为您指定格式的String
(因为您调用了format()
)。
因此,df2.format(unitPrice)
会评估为String
的值"12.00"
。 new Double("12.00")
会创建Double
,其值为12d
,而doubleValue()
只会返回原始double
值12d
。
此外,使用.##
表示该值将四舍五入到小数点后两位,但如果您的值小于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());
}
})