Java 检索小数点后2位的数据
我在从数据库中检索小数点后两位的数据时遇到问题。 我使用的是resultset.getDouble()方法。但结果只有1位小数。我试着用十进制格式转换成2个十进制。当我运行代码时,DisplayFood.java中出现错误“String cannot convert to double”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 =
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-想给帮助您的用户一些荣誉吗。这就是这个网站的工作原理。