Javaプログラミング初心者の記録vol.8 数字の演算-割り算編

スポンサーリンク
Javaプログラミング初心者の記録vol.8 数字の演算-割り算編 Java攻略

プログラミング初心者の私が理解できた範囲のことをできるだけかみ砕いて、これからプログラミングを始める方にも分かりやすいようにまとめています。
記事内では「です」「ます」調を使っていないのですが、最初は理解できたことなどをそのまま思うままに書いていくつもりなので許してください。

後々修正が必要だなと思った部分は新たに「です」「ます」調で記事を書いて別でまとめ、修正前と修正後を区別しやすいようにしようと思っています(文体が丁寧じゃないものは学習したばかりのものだと思ってください)。
では続きをどうぞ。

スポンサーリンク

はじめに

これまで足し算と引き算と掛け算のプログラミングをしてきた。
足し算については以下参照。
Javaプログラミング初心者の記録vol.5 数字の足し算int
引き算については以下参照。
Javaプログラミング初心者の記録vol.6 数字の演算-引き算編
掛け算については以下参照。
Javaプログラミング初心者の記録vol.7 数字の演算-掛け算編

お次は最後の掛け算。これが今までに比べたらちょっと厄介者(個人的主観)。
それでは行ってみよー!

Javaプログラミングの掛け算

四則演算のプログラミング
割り算に当たるのは「D」。
今回は「int D1=x/y;」と「int D2=y/x;」の2種類を用意した。
「D1」、「D2」と区別している理由は、もちろん結果が違ってくるから。

 

残りの「int E1=x%y;」と「int E2=y%x;」は次回。
これは四則演算ではないが「余り」を計算するもの。
D1、D2としたのは同じ「割り算」のくくりでまとめたかったから。
分かりにくかったらD、Eとつけて「余り」の演算をF、Gとしても良い。

「D1」「D2」とアルファベットと数字を組み合わせても、その前に「int」などの変数の型(今回は整数を表す型)をつければ「D」「1」と2文字以上あっても「D1」が一つの入れ物として機能する。

ただ、Dと1の間にスペースを入れてはいけない(エラーになる)。
×例:D 1 〇例:D1

数字の割り算

極端な話、「int」を前につければ『割り算』といった文字列も変数にすることが出来る。
この場合「int(整数を表す変数の型)」が前についているから、『割り算』という単語は整数を表すということ。
この場合の『割り算』という変数には「x/y」の計算結果の数字が入っている。

int 割り算=x/y;

こんな感じ。

割り算の変数の型にはdoubleを使用するのが最適な理由

では「D1」と「D2」表記に戻す。
以下が割り算の部分だけ抜粋した画像。
割り算の変数をD表記に戻したもの
おわかりいただけるだろうか、上の図で出た結果でおかしいところがあるのを。
それは「int D1=x/y;」の計算結果。

これは定義されているもの(xとy)がintを使用しているからxとyは整数であり、整数同士の計算は答えも整数で表示される。
よってこれらの(int D1=x/y;、int D2=y/x;)答えも整数でしか表示されない。

 

上の図の場合、x/yは5割る10ということ。
普通なら答えは「0.5」となるはずだが答えの表示は「0」となっている。
これはD1の答えを整数で表示するように指定している(int D1)から、答えが小数点になっても小数点以下が省略されて整数で無理やり表示される。

本来の答えは「0.5」 ⇒ int D1だからD1は整数で表示! ⇒ 小数点以下の「.5」が省略 ⇒ 表示される答えは「0」

だから割り算をするとき、答えを表す変数の型は「double」でないと正確な答えを表示できない
doubleについては「引き算」のパートでちょっと触れたからそちらを確認してみて。
Javaプログラミング初心者の記録vol.6 数字の演算-引き算編

答えを表す部分のみ「double」を使用した場合の表示

割り算の答え部分のみdouble使用
答えを表す部分(double D1=x/y;、double D2=y/x; )のみ小数点を表す型のdoubleを使用した。
数字はより分かりやすいようにあえて変えてある。
わかるだろうが答えがおかしい。

答えが…変!

以上のことから定義の部分がintを使用することで整数の形(int x=26、int y=10)になっているため答えをいくら小数点で表示させようとしても小数点以下のところで正確な数字が出ないということだろう。

定義するときに「double」の変数の型を使用

数字を定義するときにどちらかの変数の型を「double」としておけば正確な答えが表示されるみたい。
これは定義するものが小数点と宣言しているから、プログラムも「小数点の計算」と認識する。
int(整数の型)で定義して答えを小数点で表示するようにしても、プログラムは整数の計算としてしか認識しないと思われる。割り算計算の定義をする際に一つをdoubleにする

足し算や引き算、割り算では整数同士の計算では整数にしかならないが、割り算では整数同士の計算結果が小数点を含んだ数字になりえる
整数と小数点の計算の時は定義するときに「double」を使うから問題ない。
例:int x=5;
double y=10.5

※そもそも足し算や引き算、掛け算のときは定義するときに小数点を含んだ数字を使うなら「double」を使わないといけないからわかりやすい。

double x=1.5;
double y=5.5;

double A=x+y; みたいな。

 

だが割り算では定義しているものが整数でも答えが小数点の値であることがある。
だから割り算では数字が整数同士であっても答えが小数点になりえるから、プログラムに小数点の計算と認識させるために定義の段階で「double」を使う必要があるということがわかる。

だが、「int」で数字を定義しても答えを小数点で表すことができる方法がある。

数字を定義するときに「int」を使って答えを少数点で表示するキャスト

int x =26;
int y =10;
double D1=x/y;
double D2=y/x;
このままなら実行しても間違った答えが表示されてしまう。
割り算の答え部分のみdouble使用
ではどうすればいいのか。
編集するのは答えの部分の「double D1=x/y;」、「double D2=y/x;」。

イコールの右側の部分の「x/y」と「y/x」は「x」と「y」がそれぞれ整数で定義されている。
プログラムでは整数で計算した結果は整数になる。

「double」って書いてちゃんと小数点の数字で表示するように指示してるじゃん

と思ったかもしれない(私は思った)。

 

ここで注意すべきが「=(イコール)」。
Javaプログラミングの「=」は「同じ」という意味ではなく、「代入」という意味。

いくら答えの部分のみ小数点の数字で表示させようとしても「x/y」と「y/x」の部分を整数で計算しているままでは答えは整数になる。

そして整数の結果を小数点を含んだ数字で無理やり表示させようとして「数字.0」と「.0」をくっつけただけの結果が表示されてしまう。

D1を例にあげる

xの値が26という整数、yの値が10という整数で「x/y」という計算式に当てはめる。
そうすると数学的には「26/10(26割る10)」となり、本来の答えは「2.6」となる。

 

でもxとyの前には整数を表す「int」が使われているため、「26」と「10」の整数同士の計算になる。

プログラミングでは整数の計算の答えは例え計算結果が少数値(2.6とか)でも整数(2とか)で表わされるため、小数点以下の「.6」はここで切り捨てられてしまう。
するとここでの「x/y」の答えは「2」ということで認識してしまう。

ここで計算がおかしくなってた!

その「2」という計算結果が「D1」に代入されてしまう。
計算はまず右辺で行われ、その結果を左辺に代入する。

順番的には「右から左」っていう感じかな?

左辺 = ←代入(右辺の計算)

右の計算結果が整数同士の結果なら、本来の計算結果が「2.6」であってもプログラミング的計算では「2」となってしまう。

右辺の計算結果が左辺に代入されるんだが、イコールの左側では「double」が使用されている。

このことから、「右辺の計算結果(整数2)を小数点の形で表さないといけない」とプログラムが認識して答えを「2.0」と表示してしまう。

 

だから「x/y」の計算自体を「小数点の形で計算しないといけないよ」と指示する必要がある。
ではどのようにするかというと、その答えが以下の式。
double D1=(double)x/y;
double D2=(double)y/x;

この「(double)」の役割は整数だった「x」や「y」を少数点の形に変形してくれるもの。
これを「キャスト」という。

ここで注意しないといけないのは、変換するのはすぐ後ろの数字、もしくは変数などのプログラム

D1では「」がキャストによって整数から少数値に変換されている。
D2では「」がキャストによって少数値から整数に変換されている。

このキャストはいつでも使えるというものではなく、文字列を少数点の形で表したりと変数の型があまりにも違いすぎたらエラーを起こすから注意。

補助的な役割っぽい。

ここで言うと、もし「x」と「y」が小数点に変換できないものだったらエラーを起こす。

 

int x =26;
int y =10;
double D1=(double)x/y;
double D2=(double)y/x;
キャストを使った割り算
これで正確な答えが表示された。

これがキャストかー。

 

まとめ

足し算や引き算、掛け算と違って整数で定義しても答えが小数点となりえるなら、数字を定義する段階から「double」を使用しなければならないということが分かった。

四則演算を同じクラス内で数字を単純に計算するときはintよりも「double」を使用したほうがいいが、より便利な「キャスト」という方法があるということが分かった。
変数の型を変えることができるから便利みたい。

「キャスト」が何か少しでも理解できれば今回はいいか。

次は「余り」の計算方法と結果の見方について触れるつもり。
割り算的な要素があるもので、そんなに複雑なものではない(とちらっと見て感じた次第)。

このエントリーをはてなブックマークに追加

コメント

タイトルとURLをコピーしました