Java JDK - possible avec perte de conversion de double en int
Donc, j'ai récemment écrit le code suivant:
import java.util.Scanner;
public class TrainTicket
{
public static void main (String args[])
{
Scanner money = new Scanner(System.in);
System.out.print("Please type in the type of ticket you would like to buy.\nA. Child B. Adult C. Elder.");
String type = money.next();
System.out.print("Now please type in the amount of tickets you would like to buy.");
int much = money.nextInt();
int price = 0;
switch (type)
{
case "A":
price = 10;
break;
case "B":
price = 60;
break;
case "C":
price = 35;
break;
default:
price = 0;
System.out.print("Not a option ;-;");
}
if (price!=0)
{
int total2 = price* much* 0.7;
System.out.print("Do you have a coupon code? Enter Y or N");
String YN = money.next();
if (YN.equals("Y"))
{
System.out.print("Please enter your coupon code.");
int coupon = money.nextInt();
if(coupon==21)
{
System.out.println("Your total price is " + "$" + total2 + ".");
}
else
{
System.out.println("Invalid coupon code, your total price is " + "$" + price* much + ".");
}
}
else
{
System.out.println("Your total price is " + "$" + price* much + "." );
}
}
money.close();
}
}
Cependant, elle maintient l'affichage de ce:
TrainTicket.java:31: error: incompatible types: possible lossy conversion from double to int
int total2 = price* much* 0.7;
Quand j'essaie de l'exécuter avec la commande cmd.
Quelqu'un peut-il aider et expliquer l'erreur que j'ai faite? Toute aide est appréciée :).
Merci!
Vous devez vous connecter pour publier un commentaire.
Lorsque vous convertissez
double
àint
,la précision de la valeur est perdue.Par exemple,
Lorsque vous convertissez 4.8657 (double) int.L'int valeur de 4.Primitive
int
ne pas stocker des nombres décimaux.Si vous perdez de 0.8657.Dans votre cas,0.7 est une valeur de type double(virgule flottante traités comme double par défaut, sauf si mentionné en tant que float-0.7 f).
Lorsque vous calculez
price*much*0.7
,la réponse est un double de la valeur et donc le compilateur ne vous permettra pas de le stocker dans un type entier car il pourrait y avoir une perte de précision.C'est donc ce qui estpossible lossy conversion
,vous risquez de perdre de la précision.Alors, que pourriez-vous faire à ce sujet?
Vous devez indiquer au compilateur que vous voulez vraiment faire.Vous devez lui dire que vous savez ce que vous faites.
Afin de convertir explicitement double en int en utilisant le code suivant:
Dans votre cas,puisque vous êtes le calcul du coût,je vous suggère de déclarer la variable
total2
que le type double ou float.Vous essayez d'affecter
price* much* 0.7
, qui est une valeur à virgule flottante (undouble
), pour une variable de type entier. Undouble
n'est pas un entier, donc en général uneint
variable ne peut pas tenir unedouble
valeur.Par exemple, supposons que le résultat de votre calcul est
12.6
. Vous ne pouvez pas tenir12.6
dans une variable de type entier, mais vous pourriez lancer loin de la fraction et de stocker tout12
.Si vous n'êtes pas inquiet au sujet de la fraction que vous allez perdre, la fonte de votre numéro à une
int
comme ceci:Ou vous pouvez arrondir à l'entier le plus proche.