我在使用数据库中的两位小数来检索数据时遇到问题。 我使用的是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;
}
}
答案 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
类不一致,price
是double
字段:private double price;
将price
从double
更改为String
并不一定是最好的方法,原因有两个:
数据的可视化表示不应更改数据值。
如果十进制值为4浮点值(例如:10.5445
),则将其格式化为10.54
并仅将该信息作为String
字段存储在类中,从而截断数据值。如果再次将值存储在数据库中,则会在客户端未修改对象时更改初始值。
您不能再使用带有double的简单setPrice()
方法(因此以自然的方式),因为您应该在setPrice()
方法中执行一些计算来更改{{1转到double
。
要解决您的问题,您可以引入一种返回格式化价格的新方法:
String
如果经常调用public String getFormatedPrice(){
return df.format(resultset.getDouble("price"));
}
,则可以缓存结果而不是调用getFormatedPrice()
。