Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可能的精度损失?_Java - Fatal编程技术网

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
可能不是一个精确的整数,它在抱怨你需要取整。噢,哇,我觉得很愚蠢啊哈