[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
2022-01-11 09:27:55
質問
次のようなJavaプログラムがあります。
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;
解決方法は?
を変換すると
double
から
int
値の精度は失われます。例えば、4.8657(double)をintに変換すると、intの値は4.Primitiveになります。
int
は10進数を保存しないので、0.8657を失うことになります。
この場合、0.7はdouble値です(浮動小数点はfloat-0.7fと記述しない限り、デフォルトでdoubleとして扱われます)。計算するとき
price*much*0.7
そのため、コンパイラはその答えを整数型に格納することを許可しません。
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
関連
-
[解決済み】gitが「変更をコミットするか、マージする前に隠してください」と言うのを解決するにはどうしたらいいですか?
-
[解決済み】コレクションが変更され、列挙操作が実行されないことがある。
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] C#でenumからint値を取得する
-
[解決済み] ファイルの内容からJavaの文字列を作成するにはどうすればよいですか?
-
[解決済み] :: (ダブルコロン) 演算子 in Java 8
-
[解決済み] Java文字列→日付変換
-
[解決済み】Javaの「ダブルブレース初期化」の効率化?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スクリプトとバッチ処理がひとつに
-
[解決済み] 式は変更可能なlvalueでなければならない
-
[解決済み】「g++」が内部コマンド、外部コマンド、操作可能なプログラム、バッチファイルとして認識されない。
-
[解決済み】C++ Cout & Cin & System "Ambiguous" [クローズド]。
-
[解決済み】なぜ「Pickle - EOFError.」が発生するのでしょうか?空のファイルを読むと「Ran out of input」と表示されるのはなぜですか?
-
[解決済み】recyclerview アダプタが添付されていないため、レイアウトをスキップしています。
-
[解決済み】ValueError: 入力配列を形状 (224,224,3) から形状 (224,224) にブロードキャストできませんでした。)
-
[解決済み】Java JDK - doubleからintへの非可逆変換の可能性
-
[解決済み] ポインタからキャストを使わずに整数を返す [-Wint-conversion] 戻り値の候補を作る
-
[解決済み】git pullしようとするとエラー: .git/FETCH_HEAD を開けない: パーミッションが拒否される