スポンサードリンク

【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」で実行してください。

java printlnメソッド内での文字列と変数の足し算

しかし結果は、「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での数値データの取り扱いは、人間の脳みたいに柔軟性がないので、上記のことをしっかりと抑えておかなければなりません。

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント