こうやって復習を軸にアウトプットしていると少しづつだけど脳みそに知識がしみ込んでいく感覚がある。私は理解が人の数倍時間がかかるので、人一倍というより人三倍行動しないと追っつかないのでやるかやらないか。
いや、やらないという選択肢はないかな。
やらないことはやらないけど。
お品書き
- 基本データ型の型変換
- ◆型変換Sample
- ◆コマンドラインから任意の金額を入力する場合
基本データ型の型変換
数値同士の演算や代入をするときに、データ型の変換が自動か手動か・・・
自動: 表現できる値の幅が小から大
キャストで明示する: 表現できる値の幅が大から小
データ型のサイズ一覧は ↓
小さい箱に入っていたデータは大きい箱には問題なく入るよね。
でも
大きい箱に入っているデータは小さい箱に入れようものなら溢れちゃいません?
て話。
ですよね。
このままではコンパイルエラーが出てしまうから大から小は明示的に入れられるように教えてあげる必要がある。
その為に、キャストという記述をします。
例:
int i :
double d :
d = i :
→自動
i = (int)d :
→(int)
がキャスト。()内は型変換後の型
どんな時使うの?
結構多いのが少数の計算結果を整数に変えたいときとか。
例えば,
1980円のものを買って消費税8%がついた場合の総額の計算。(2024年の今は10%だけど。。。)
1980x1.08=2138.4
となり少数が出るけど税込み価格にはないので、小数点以下を切り捨てて整数にしたいとき(int)
を使う。
◆型変換Sample
class Aaa{
public static void main (String[] args){
int i;
double a ;
double d ;
i = 1980 ;
a = 1.08 ;
d = i * a ; //税込み価格の計算
d = (int)d ; //double型をintのキャストをつけて明示的に型変換
System.out.println(i * a); //小数点込み結果
System.out.println(d); //小数点以下切り捨て結果
}
}
少々雑だけど簡単に書くとこんな感じ。
C:\Java\1>javac Aaa.java
C:\Java\1>java Aaa
2138.4 //小数点あり
2138.0 //小数点以下切り捨て
切り捨て成功。
◆コマンドラインから任意の金額を入力する場合
class Aaa{
public static void main (String[] args){
int price = Integer.parseInt(args[0]); //コマンドラインからデータ入力
double rate = 0.08; //消費税率の初期化
int amount; //計算結果の変数宣言
amount = (int)(price * (1 + rate)); //消費税率に1を足して税込み価格に計算しキャストで型変換
System.out.println("税込み価格:" + amount + "円"); //計算結果
}
}
C:\Java\1>java Aaa 1980
税込み価格:2138円
こんな感じ。
後者のほうがスマートですかね。
ちなみに、型変換しないとどうなるか?
class Aaa{
public static void main (String[] args){
int price = Integer.parseInt(args[0]);
double rate = 0.08;
int amount;
amount = price * (1 + rate); //double型の計算結果がint型の変数に代入される
System.out.println("税込み価格:" + amount + "円");
}
}
C:\Java\1>javac Aaa.java
Aaa.java:7: エラー: 不適合な型: 精度が失われる可能性があるdoubleからintへの変換
amount = price * (1 + rate);
^
エラー1個
エラーが出ましたね。