Java JDK - möglich verlustreiche Umwandlung von double zu int
Also ich habe vor kurzem geschrieben das folgenden code:
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();
}
}
Jedoch, es hält die Anzeige dieser:
TrainTicket.java:31: error: incompatible types: possible lossy conversion from double to int
int total2 = price* much* 0.7;
Wenn ich versuche und ausführen mit cmd.
Kann jemand helfen, und erklären Sie die Fehler, die ich gemacht habe? Jede Hilfe ist willkommen :).
Danke!
InformationsquelleAutor | 2015-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim konvertieren
double
zuint
,die Präzision der Wert verloren.Zum Beispiel,
Wenn Sie konvertieren 4.8657 (double) int.Der int-Wert 4.Primitive
int
nicht speichern von Dezimalzahlen.So verlieren Sie 0.8657.In Ihrem Fall,0.7 ist ein double-Wert(Gleitkommazahl behandelt, als Doppel-standardmäßig, es sei denn, wie erwähnt float-0.7 f).
Wenn Sie berechnen
price*much*0.7
,die Antwort ist ein double-Wert und damit der compiler würde nicht zulassen, dass Sie es speichern in einem Typ integer, da könnte es zu einem Verlust an Präzision.Also, was istpossible lossy conversion
können Sie verlieren Präzision.Also, was könnte man dagegen tun?
Sie müssen, sagen Sie dem compiler, dass Sie wirklich wollen, es zu tun.Sie müssen es sagen, dass Sie wissen, was Sie tun.
So explizit konvertieren von double zu int mit dem folgenden code:
In Ihrem Fall,da Sie die Berechnung der Kosten,werde ich Sie vorschlagen, um zu erklären, variable
total2
als den Typ double oder float.Betrag ist in der Regel ausgedrückt in Dezimalzahlen und das ist der Grund, warum ich es vorgeschlagen!
Ich meinte zu sagen, verwenden Sie doubles anstelle von floats.... Schwimmer verlieren Präzision zu schnell, um nützlich zu sein für sogar jeden Tag Fällen.
InformationsquelleAutor Mathews Mathai
Sie versuchen, zuweisen
price* much* 0.7
, die eine floating-point-Wert (eindouble
), eine integer-variable. Eindouble
ist nicht eine exakte ganze Zahl, so ist im Allgemeinen eineint
variable nicht haltendouble
Wert.Nehmen wir zum Beispiel an das Ergebnis Ihrer Berechnung ist
12.6
. Sie können nicht halten12.6
in eine integer-variable, aber Sie könnte werfen den Bruchteil und nur speichern12
.Wenn Sie nicht besorgt über die Fraktion, die Sie verlieren, werfen Sie Ihre Nummer zu einem
int
wie diese:Oder Sie konnte, um ihn auf die nächste Ganzzahl.
InformationsquelleAutor khelwood