Java 可能的精度损失?
可能重复:Java 可能的精度损失?,java,Java,可能重复: 好的,对于我正在编写的一个程序,我称之为“飞行”,我创建了一个方法来计算飞行过程中使用的燃油量。我的代码有两个错误,虽然上面写着“可能会丢失精度:double required:int”。有人能帮我找出为什么会出现这个错误吗 以下是我对该方法的代码: public double calculateFuel(){ if (numofmiles<1000){ numofmiles = numofmiles*2; } else if (numof
好的,对于我正在编写的一个程序,我称之为“飞行”,我创建了一个方法来计算飞行过程中使用的燃油量。我的代码有两个错误,虽然上面写着“可能会丢失精度:double required:int”。有人能帮我找出为什么会出现这个错误吗 以下是我对该方法的代码:
public double calculateFuel(){
if (numofmiles<1000){
numofmiles = numofmiles*2;
}
else if (numofmiles>1000 && numofmiles<3000){
numofmiles = numofmiles*1.75;
}
else if (numofmiles>3000){
numofmiles = numofmiles*1.5;
}
//basing off of that a plane goes 30 miles on 1 gallon
double fuel = numofmiles/30;
return fuel;
}
public double calculateFuel(){
如果(Numofmiles 1000和&Numofmiles 3000){
numofmiles=numofmiles*1.5;
}
//以此为基础,一架飞机用1加仑汽油行驶30英里
双倍燃油=单位英里/30;
回油;
}
numfmiles
需要声明为双精度,而不是整数。将numfmiles声明为双精度。精度损失意味着您正在丢失给定值的信息。如果numOfMiles是一个整数值1035,它将乘以1.75。这将导致值1811.25不是整数值。截断值以满足变量声明会导致精度损失。对于任意精度,应使用double基元类型或BigDecimal。NumoMiles在类的开头声明为int。在测试仪中,我使用文件读取器从名为input.txt。当您将双精度赋值给浮点,将long赋值给int,将浮点赋值给int,等等,如果没有显式强制转换,您将得到警告。在上面的例子中,如果numfmiles
是一个long或int,你会在中间的两个倍数上得到警告,因为你给int赋值了一个double。好了,开始吧numfmiles*1.5
可能不是一个精确的整数,它在抱怨你需要取整。噢,哇,我觉得很愚蠢啊哈