2012-05-07 6 views
2

Possible en double:
Java loss of precisionPerte de précision possible?

ok donc pour un programme que je vous écris, je l'ai appelé « Flight » J'ai créé une méthode qui calcule la quantité de carburant à utiliser pendant le vol. J'obtiens 2 erreurs sur mon code cependant qui indique «perte possible de précision trouvée: double required: int» n'importe qui peut m'aider à découvrir pourquoi je reçois cette erreur?

ici est mon code pour cette méthode:

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

Comment est-ce que numofMiles est déclaré? – bmargulies

+0

numofmiles est déclaré au début de la classe comme int. Dans le testeur, j'utilise le lecteur de fichiers pour obtenir le numofmiles et d'autres informations sur l'objet à partir d'un fichier appelé input.txt. – Andrew

+0

Lorsque vous affectez un double à un float, un long à un int, un float à un int, etc., sans un cast explicite, vous recevrez l'avertissement. Dans le cas ci-dessus, si 'numofMiles' est un long ou un int vous obtiendrez l'avertissement sur les deux multiplications du milieu parce que vous affectez un double à un int. –

Répondre

2

numofmiles doit être déclarée comme un double, pas un entier.

0

déclare numOfMiles en tant que double. Une perte de précision signifie que vous perdez des informations sur la valeur donnée. Si numOfMiles est une valeur entière de 1035, elle sera multipliée par 1.75. cela aboutirait à une valeur de 1811,25 qui n'est pas une valeur entière. tronquer la valeur pour satisfaire la déclaration de la variable entraîne une perte de précision.

0

Vous devez utiliser le type double primitive ou BigDecimal pour une précision arbitraire.

Questions connexes