2013-07-08 47 views
1

我得到了一个十进制(18,2)数据类型的表格列作为数据库中的价格。当我创建一个产品时,假设我输入15.50美元,它在数据库中存储为15.50。但是,当我试图从数据库检索值为Double并显示在表中时,它显示15.5。这是我建立了我的价格表:将双精度转换为2位小数

TableColumn prodPriceCol = new TableColumn("PRICE ($)"); 
prodPriceCol.setCellValueFactory(new PropertyValueFactory<Product, Double>("prodPrice")); 
prodPriceCol.setMinWidth(100); 
我的产品类中

然后:

private SimpleDoubleProperty prodPrice; 

public void setprodPrice(double value) { 
    prodPriceProperty().set(value); 
} 

public Double getprodPrice() { 
    return prodPriceProperty().get(); 
} 

public SimpleDoubleProperty prodPriceProperty() { 
    if (prodPrice == null) { 
     prodPrice = new SimpleDoubleProperty(this, "prodPrice"); 
    } 
    return prodPrice; 
} 

我的SQL:

String sql = "SELECT * FROM sm_product WHERE productCategory = '" + category + "'"; 
     ResultSet rs = null; 
     // Call readRequest to get the result 
     rs = db.readRequest(sql); 

     while (rs.next()) { 
      String ID = rs.getString("productID"); 
      String name = rs.getString("productName"); 
      String desc = rs.getString("productDescription"); 
      double price = rs.getDouble("productPrice"); 

通过我这样做的方式JavaFX的。

+0

如果您需要格式化,你需要一个数据类型,包括格式化。如果支持,我建议使用String属性或BigDecimal。 –

回答

2

使用DecimalFormat将您的双精度值格式化为格式化字符串。

String priceString = new DecimalFormat("$##.##").format(price); 

输出 -

$15.50 
+0

对不起,我想要做的就是改变它显示2个小数位,如货币。例如,15.50美元 –

+0

实际上它只会打印两个十进制值,答案更新,最好试一试。 :) –

+0

但它仍然显示为15.5这是一位小数。 –

0

我建议,得到字符串形式的值。

String price = rs.getString("productPrice"); 

并且在哪里您需要显示结果显示字符串并将计算部分转换为Double然后使用它。

+0

但是如果创建产品时,用户只输入15.5。然后,如果我显示使用字符串而不转换,它将显示为15.5 –

0

可以格式化使用价格的NumberFormat:

NumberFormat nf = new NumberFormat() ; 
    nf.setMaximumFractionDigits(2) 
    nf.setMinimumFractionDigits(2) 


     nf.format(ton_double) 
     while (rs.next()) { 
        String ID = rs.getString("productID"); 
        String name = rs.getString("productName"); 
        String desc = rs.getString("productDescription"); 
      double priceNF = rs.getDouble("productPrice"); 

        double price = Double.valueOf(nf.format(priceNf)); 
     } 
0

你应该不是你的值存储为Double秒。 BigDecimal是货币价值的标准类型。

0

您可以通过使用BigDecimal格式:

double value= 255.956666; 

BigDecimal bd = new BigDecimal(value).setScale(2, RoundingMode.HALF_UP); 
System.out.println("value=" + bd);