作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我只是在为要出售的商品开设快速类(class)。这是该类的代码:
public class Item{
private int itemNumber;
private double itemCost;
private String manName;
public Item(int inum, double icost, String mname){
itemNumber = inum;
itemCost = icost;
manName = mname;
}
public int getNum(){
return itemNumber;
}
public double getCost(){
return itemCost;
}
public String getName(){
return manName;
}
public void setNum(int inum){
itemNumber = inum;
}
public void setCost(double icost){
itemCost = icost;
}
public void setName(String mname){
manName = mname;
}
}
下面是我用来测试的简单驱动程序中的调用方法:
public static void testItem(){
Item item = new Item(4,44.50,"Example1");
item.setCost(50.00);
item.setNum(3);
item.setName("Example2");
System.out.println(item.getNum() + " " + item.getCost() + " " + item.getName());
}
}
我的好奇心是,最初我使用 float 作为成本变量。但是,在编译时,由于它是从 double TO float 转换而来的,所以我收到了可能丢失数据的错误。
我已经将变量声明为 float ,但看起来它们被认为是 double 的。
我只是一个非常的初级 Java 用户,目前正在使用 TextPad 作为我的编辑器。我只是对这个事实感到好奇,以便我可以牢记答案。谢谢,伙计们!
最佳答案
编译器类型错误是因为1.2
(例如)是一个double literal,而1.2f
是一个 float 。
将所有类型更改为 double
“修复”了这个问题,因为不需要将 double 类型转换为 float 类型。其他更正是使用 float 文字(例如 50.0f
)或显式转换。
double d = 1.2; // GOOD, double
float f = 1.2; // BAD, double -> float ("error: possible loss of precision")
float f = 1.2f; // GOOD, float
float f = (float)1.2; // OK, double -> float by explicit cast
float f = 1; // OK, int -> float
当然,double 或 float 都不是“正确”的货币,应该使用 固定精度 类型来处理,例如 BigDecimal 提供的类型。
另见:
关于Java 好奇号 : Using a Float or Double for Costs in a Class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26109119/
我是一名优秀的程序员,十分优秀!