Java 检索小数点后2位的数据

Java 检索小数点后2位的数据,java,Java,我在从数据库中检索小数点后两位的数据时遇到问题。 我使用的是resultset.getDouble()方法。但结果只有1位小数。我试着用十进制格式转换成2个十进制。当我运行代码时,DisplayFood.java中出现错误“String cannot convert to double” Connection connection = null; Statement statement = null; ResultSet resultset = null; DecimalFormat df =

我在从数据库中检索小数点后两位的数据时遇到问题。 我使用的是resultset.getDouble()方法。但结果只有1位小数。我试着用十进制格式转换成2个十进制。当我运行代码时,DisplayFood.java中出现错误“String cannot convert to double”

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

}

由于试图在双精度字段中设置字符串值,因此出现此错误。 使用
resultset.getDouble(“价格”)
从resultset读取项目价格

要用两位小数打印价格,可以使用格式设置程序System.out.println,如
df.format(foodMenu.getPrice())

我使用的是resultset.getDouble()方法。但这只给了我1 结果的小数点

getDouble()
方法返回值,因为java中表示的是双精度。

getDouble()
javadoc:

检索当前行中指定列的值 此ResultSet对象在Java编程语言中作为双精度对象

这意味着如果您的数字值为
10.5
,则双精度将具有as值
10.5
,而不是
10.50

我试着用十进制格式转换成2个十进制

DecimalFormat.format(double number)
将double格式化为具有特定格式的
字符串
指定的格式在您的代码中:

DecimalFormat df = new DecimalFormat("#.00");
因此,是的,您不能将
Double
分配给
String
,因为它们是不兼容的类型。
要解决您的问题,您必须将
DecimalFormat.format(双倍数字)
的结果存储在
字符串中

但它确实与
FoodRecord
类不一致,其中
price
是一个
double
字段:
private double price

将类中的
price
double
更改为
String
不一定是最好的方法,原因有二:

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

  • 您不能再使用带有双精度的简单
    setPrice()
    方法(以自然的方式),因为您应该在
    setPrice()
    方法中执行一些计算,以将
    double
    更改为
    字符串

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

public String getFormatedPrice(){
  return df.format(resultset.getDouble("price"));
}

如果频繁调用
getFormattedPrice()
,则可以缓存结果,而不是调用
df.format()

,这都是错误的。数据库中的货币应存储为十进制,而不是双精度。没有带两位小数的
双精度
。您应该在Java代码中使用
BigDecimal
。@Lue Fang-想给帮助您的用户一些荣誉吗。这就是这个网站的工作原理。