【Java】数値データの扱い方
Javaでは、同じ数字といえども、それが数字データか文字データかで大きな違いを生じます。ここでは数値データについて説明します。
1.数字の「文字データ」と「数値データ」
人間の脳では、数字は数字として認識し、当たり前のように計算できますが、Javaの場合、「文字データの数字」は計算できません。
文字データの数字とは、数字をシングルクォーテーションで囲んだものです。
'5'
以下のように、文字データの数字では計算(足し算や引き算など)ができなくなります。
① 1 + 3 →4になる
② '1' + 3 →4にならない
そのため、Javaで数字を用いる際、「この数字は文字データとして扱うのか?それとも数字データとして扱うのか?」ということを明確に決めなければなりません。
2.printlnメソッド内で変数同士の計算を行う場合、括弧でまとめる
変数への代入あれこれで説明したように、println(プリントライン)メソッドの引数内では、変数同士の計算ができます。ですので、以下のサンプルプログラムは、「4」と出力されそうです。
これを確認してみましょう。それでは、「Sample08.java」という名前のファイルを作成し、以下のJavaプログラムを入力してください。
public class Sample08{ public static void main(String args[]){ int i = 1; int j = 3; System.out.println("変数iとjの足し算結果は、" + i + j + "です。"); } }
そして「javac Sample08.java」でコンパイルし「java Sample08」で実行してください。
しかし結果は、「13」と表示されます。
なぜ、「13」と表示されるのかの説明ですが、Javaでは、「+」は数字のみの場合は足し算になるのですが、文字列が一つでも入ると連結になるからです。
この場合、printlnメソッド内で計算させるには、以下のように「( )」括弧でくくらなければなりません。
System.out.println("変数iとjの足し算結果は、" + (i + j) + "です。");
こうすることで、括弧内で先に計算が処理され、他の文字列と連結されます。
3.数値データの精度
数値を扱うデータ型は以下の6つがあります。ここで、あるデータ型の変数に、違うデータ型の数値を代入してみたいと思います。
- 整数:byte short int long
- 実数:float double
まず、double型の変数をint型の変数に代入します。
double d = 3.6;
int i = d;
これは、コンパイルエラーとなります。理由は、int型の変数「i」は整数のみしか扱えないので、実数である3.6は代入できないからです(数値の精度が低下するため)。
【詳細】
3.6を変数「i」に代入しようとすると、変数「i」は整数のみしか扱えないので、強引に少数を切り捨てて「3.6→3」とします。
しかし、本来3.6であったものを3にしたら、数値の精度が低下してしまい、正しい処理結果が得られなくなります。
このように、数値の精度が低下する場合はコンパイルエラーとなります。
次に、int型の変数をdouble型の変数に代入します。
int i = 4;
double d = i;
これは代入可能で、変数「d」の値は「4.0」となります。この場合、「4→4.0」となり、数値の精度が増していることがわかります。このように、数値の精度が増す場合は、違うデータ型でも代入が可能です。
4.double型の挙動
double型の変数「d」に「10÷3」の数値を以下のように代入したいと思います(「/」は割り算)。
double d = 10/3;
この時の変数「d」の値は、「3.333・・・」とならずに、「3.0」となります。これは、「10」と「3」という整数どうしの割り算なので、いったん少数が切り捨てられ整数である「3」となり、そのあとdouble型の変数「d」に代入されるので、「3.0」となります。
小数点以下も代入したい場合は、どちらか一方、もしくは両方を実数にする必要があります。
double d = 10.0/3;
double d = 10/3.0;
double d = 10.0/3.0;
5.int型の挙動
int型の変数に実数を代入しようとすると、コンパイルエラーとなります(数値の精度が低下するため)。
int i = 2.5; ← コンパイルエラー
int i = 2.0; ← コンパイルエラー
しかし、以下の場合はコンパイルエラーとならず、「2」という結果が得られます。
int i = 5/2; ← 変数「i」の値は「2」
「5÷2」はどうみても「2.5」ですが、整数どうしの計算なため、小数部分が切り捨てられ、「2」となり、それを代入しているからエラーとならずに済みます。
このように、Javaでの数値データの取り扱いは、人間の脳みたいに柔軟性がないので、上記のことをしっかりと抑えておかなければなりません。
コメント
まだコメントはありません。