检索小数点后2位的数据

时间:2017-06-10 07:32:57

标签: java

我在使用数据库中的两位小数来检索数据时遇到问题。 我使用的是resultset.getDouble()方法。但是这给了我结果只有1位小数。我尝试使用DecimalFormat转换为2十进制。当我运行我的代码时,我从DisplayFood.java收到错误“String无法转换为double”

DisplayFood.java

Connection connection = null;
Statement statement = null;
ResultSet resultset = null;
DecimalFormat df = new DecimalFormat("#.00");

String query = "SELECT * FROM food";
statement = connection.createStatement();

resultset = statement.executeQuery(query);

while(resultset.next())
{
     FoodRecord foodmenu = new FoodRecord();
     foodmenu.setItemName(resultset.getString("itemName"));

     foodmenu.setPrice(df.format(resultset.getDouble("price")));
     foodmenu.setRestaurant(resultset.getString("restaurant"));

     food.add(foodmenu);
}

FoodRecord.java

public class FoodRecord {
    private String itemName;
    private double price;
    private String restaurant;

    public FoodRecord() {
    }

    public String getItemName() {
        return itemName;
    }

    public void setItemName(String itemName) {
        this.itemName = itemName;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getRestaurant() {
        return restaurant;
    }

    public void setRestaurant(String restaurant) {
        this.restaurant = restaurant;
    }

}

2 个答案:

答案 0 :(得分:0)

您得到此错误,因为您尝试在双字段中设置字符串值。 使用resultset.getDouble("price")从结果集中读取价格。

要使用两个小数位数打印价格,您可以将格式化程序与System.out.println一起使用,例如df.format(foodMenu.getPrice())

答案 1 :(得分:0)

  

我使用的是resultset.getDouble()方法。但这只给我一个   结果上的小数位

getDouble()方法返回值编号,因为double表示在java。

getDouble() javadoc:

  

检索当前行中指定列的值   此ResultSet对象作为Java编程语言中的double。

这意味着如果您的数字值为10.5,则该值的值为10.5,而不是10.50

  

我尝试使用DecimalFormat转换为2十进制

DecimalFormat.format(double number)将带有特定格式的String格式化为double。
指定的格式在您的代码中:

DecimalFormat df = new DecimalFormat("#.00");

所以,是的,您无法将Double分配给String,因为这些类型不兼容。
要解决您的问题,您必须将DecimalFormat.format(double number)的结果存储在String

但它确实与FoodRecord类不一致,pricedouble字段:private double price;

pricedouble更改为String并不一定是最好的方法,原因有两个:

  • 数据的可视化表示不应更改数据值。 如果十进制值为4浮点值(例如:10.5445),则将其格式化为10.54并仅将该信息作为String字段存储在类中,从而截断数据值。如果再次将值存储在数据库中,则会在客户端未修改对象时更改初始值。

  • 您不能再使用带有double的简单setPrice()方法(因此以自然的方式),因为您应该在setPrice()方法中执行一些计算来更改{{1转到double

要解决您的问题,您可以引入一种返回格式化价格的新方法:

String

如果经常调用public String getFormatedPrice(){ return df.format(resultset.getDouble("price")); } ,则可以缓存结果而不是调用getFormatedPrice()