2012-05-07 85 views
2

可能重複:
Java loss of precision可能會損失精度?

好了,所以對於我在寫我呼籲程序「飛行」我創建的計算過程中使用的燃料量的方法飛行。我得到了2代碼,雖然我的代碼說:「可能發生的精度損失: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; 
    } 
+5

numofMiles是如何聲明的? – bmargulies

+0

numofmiles在類的開頭聲明爲int。在測試程序中,我使用File reader從名爲input.txt的文件中獲取有關對象的numofmiles和其他信息。 – Andrew

+0

當你將一個double分配給一個float,一個long分配給一個int,一個float分配給一個int等時,如果沒有明確的轉換,你會得到警告。在上面的例子中,如果'numofMiles'是一個long或int,你會在中間的兩個乘法中得到警告,因爲你將一個double賦值給一個int。 –

回答

2

numofmiles需要被聲明爲雙,而不是一個整數。

0

將numOfMiles聲明爲double。精確度的損失意味着您正在丟失給定值的信息。如果numOfMiles是1035的整數值,它將乘以1.75。這會導致值爲1811.25,這不是一個整數值。截斷該值以滿足變量聲明會導致精度損失。

0

對於任意精度,您應該使用double基元類型或BigDecimal。