gpt4 book ai didi

Java 好奇号 : Using a Float or Double for Costs in a Class

转载 作者:行者123 更新时间:2023-11-29 03:16:45 27 4
gpt4 key购买 nike

我只是在为要出售的商品开设快速类(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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com