目次
型変換と文字列
型と大きさ
▶型によって変数の大きさが異なる
図のように double の方がはるかに int 型よりも大きさが大きいです。
なぜかというと整数の2は実際には2.0や2.00と表されるため少数型の方が容量が必要だからです。
これが実際のプログラムの中だとどのように変わるのでしょうか。
型変換
✖
double d = 9.8 ;
int i = d ;
double型のdに9.8を代入しました。
double型の変数dの中身をint型の変数iに代入する。
すると実行エラーとなってしまいます。
〇
double d = 9.8 ;
int i = ( int ) d ;
正しく代入するためにはint型を( )で囲みます。( int )にすることによって無理やりiの中に入れることは可能です。
これをすると実行エラーにはなりませんが、情報のロスが起きてしまいます。
つまり、int型の i は少数派含まないので少数の9.8ではなく9になってしまいます。
小数点以下は容赦なく切り捨てとなります。
型の大きいdouble型から型の小さいint型への代入は不可ですが、逆はOKです。
- 大きな変数(double)の値を小さな変数(int)に代入できない
- ( )を使って型変換できる
- 型変換を「キャスト」ともいう
異なる型を含む演算
int i = 5 ;
double d = 0.5 ;
System . out . println ( i + d ) ; // 5.5
どうしてもdouble型とint型をオペランドとして演算したい場合はシステム側の決まりがあります。
それは大きい方の箱に合わせて演算をおこなうということです。
int型の整数5とdouble型の少数0.5の演算の場合は
System . out . println の計算する時点で i は5ではなく 5.0 という少数型に統一されています。
型の異なる同士の計算はなるべく避けますが、どうしても計算したい場合はその結果を考慮して記述します。
- 型の異なる変数や値の間で演算を行った場合は、最も大きい型(上の例ではdouble型)に統一されて計算される
整数同士の割り算
int a = 5 ;
int b = 2 ;
double c = a / b ;
System . out . println ( c ) ; // 2.0
- 整数と整数の割り算は整数型として扱われる上の例では 5 / 2 が 2.0 になる
- 正しい値を求めるには、double型にキャストする必要がある例: double c = ( double ) a / ( double ) b ;
- 型変換を「キャスト」ともいう
割り算は割り切れるときは良いですが、割り切れないときは int 型の整数に
どうしても少数が出てきてしまいます。
上の例をみてみると5÷2=2.5になります。
少数型になったので double 型にすれば大丈夫だろうと思うかもしれませんが、出力の結果は2.0となります。
どうしてこうなるかというと、整数と整数の割り算は整数型として扱われるからです。
つまりどういうことかというと、5÷2の結果の2.5は強制的に小数点以下が切り捨てられ2.0となるということです。
結果を double 型に代入すると、出力の結果は当然2.0となります。
どうすれば2.5という正しい結果を出力できるかというとプログラムを改変する必要があります。
つまり a / b の計算の時点で int 型を double 型にキャストする。
double 型に変換された計算結果を double 型の変数 c に代入するということです。
式でいうと ( double ) a ⇐のように int 型の変数を強制的に double 型に変換します。
なので、キャストされた式は5.0÷2.0となります。
そうすると答えの2.5は double 型の c に代入されるというわけです。
要は double 型の c に何を代入するかということです。
非常にまぎらわしいですが、キャスト有りと無しの2つのプログラムを記述してその結果を見比べながらその中身の意味を考えてみてください。
練習問題
▶7÷2の計算結果が正しく3.5になるように修正しましょう。
- class CalcExample
- public static void main ( String [ ] args ) {
- int a = 7 ; // int型の変数の宣言
- int b = 2 ; // int型の変数の宣言
- double d = a / b ; // double型の変数の宣言をして a ÷ b の計算結果を代入
- System . out . println ( d ) ;
- }
- }
解説
上記のプログラムではキャストをしていないので小数点以下が強制的に切り捨てられて、出力の結果は3.0となってしまいます。
- class CalcExample
- public static void main ( String [ ] args ) {
- int a = 7 ;
- int b = 2 ;
- double d = ( double ) a / ( double ) b ; // double型の変数にキャストする
- System . out . println ( d ) ;
- }
- }
計算の時点で int 型の変数を double 型にキャストすることによって出力結果が3.5となりました。
String 型
▶文字列は String 型の変数に代入できる
String s ; // String 型の S は大文字にします
s = ” こんにちは ” ;
System . out . println ( s ) ;
char 型は1文字しか出力できないのであまり使い勝手がよくありません。なのでプログラムの中では String 型をよく使います。
String 型であれば長い文章の出力も可能です。
慣習としては String の S は大文字にします。
変数の s に ” こんにちは ” を代入できます。
▶文字列は「+」演算子で連結できる
String s 1 = ” こんにちは ” ;
String s 2 = ” 調子はいかがですか? ” ;
String s 3 = s 1 + s 2 ;
System . out . println ( s 3 ) ;
s 3 に s 1 と s 2 の中身を代入して出力させます。
出力結果はこんにちは調子はいかがですか?となります。
まとめ
キャストをすることで int 型の整数の計算結果を double 型で正しく出力することができます。
プログラムを作成するときはもっと膨大な数字を扱うこともあるかもしれませんが、
正しくコードを記述することでコンピューターに正確に計算をしてもらうことができます。
また何度も使う言葉などは String 型の変数に格納しておくと便利に使うことができます。