だから私は最近次のコードを書いた:
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();
}
}
ただし、これは表示され続けます。
TrainTicket.Java:31: error: incompatible types: possible lossy conversion from double to int
int total2 = price* much* 0.7;
Cmdで実行しようとすると。
誰かが私が犯したエラーを助けて説明できますか?どんな助けでも大歓迎です:)。ありがとう!
double
をint
に変換すると、値の精度が失われます。たとえば、4.8657(double)をintに変換すると、int値は4になります。Primitiveint
は10進数を格納しないため、0.8657が失われます。
あなたの場合、0.7はdouble値です(float-0.7fとして言及されていない限り、浮動小数点はデフォルトでdoubleとして扱われます)。 price*much*0.7
を計算する場合、答えはdouble値であるため、精度が低下する可能性があるため、コンパイラーは整数型に格納することを許可しません。これがpossible lossy conversion
です。精度が低下する可能性があります。
それで、あなたはそれについて何ができますか?本当にやりたいことをコンパイラーに伝える必要があります。自分が何をしているのかを知っていることをコンパイラーに伝える必要があります。したがって、次のコードを使用して、doubleをintに明示的に変換します。
int total2= (int) price*much*0.7;
/*(int) tells compiler that you are aware of what you are doing.*/
//also called as type casting
あなたの場合、コストを計算しているので、変数total2
をdouble型またはfloat型として宣言することをお勧めします。
double total2=price*much*0.7;
float total2=price*much*0.7;
//will work
浮動小数点値(double
)であるprice* much* 0.7
を整数変数に割り当てようとしています。 double
は正確な整数ではないため、一般にint
変数はdouble
値を保持できません。
たとえば、計算結果が12.6
であるとします。整数変数に12.6
を保持することはできませんが、分数を捨てて12
を格納することはできます。
失う分数について心配していない場合は、次のように番号をint
にキャストします。
int total2 = (int) (price* much* 0.7);
または、最も近い整数に丸めることもできます。
int total2 = (int) Math.round(price*much*0.7);