Javaの少数
![アイキャチ画像](/img/kjBGRd2B/Eyecatch.webp)
Javaの少数型の扱い方について、簡単にご紹介します。
Javaで扱える小数について
※前回ご紹介した整数の扱いの時と一緒ですね。
またJavaの少数は計算する時、特徴があるのでその部分についてもご紹介します。
![ペンタ](./xxxdeta-box/xxxOLD/0001.png)
早速Javaではどのような小数型があるのか確認しよう!
最も基本的な少数型
このdouble型はJavaで整数を扱い際に最も多く使われる型となっています。
型の宣言は下記の通りです。
double pi = 3.1415D;
duuble型を使う時には、コンパイラーにduuble型であることを知らせるために数字の後ろに『D』もしくは『d』をつけます。
![チュンすけ](./xxxdeta-box/xxxOLD/0004.png)
これを知らなくて初めは苦労したよ、、、
小数を扱うと決まっていて細かいことを気にしなければ、この型でいいかもしれません。
実際コートを書いていても頻繁にdouble型は使用する他、扱える範囲も広いため困ることは少ないとボク自身感じています。
double型の扱える整数範囲
先ほど少し触れましたが、Javaの整数型にはそれぞれ扱える範囲が決まっています。
Javaのdouble型の範囲は下記の範囲です。
最小 | 最大 | ビット数 | ±1.79769313486231570E+308 | ±4.94065645841246544E-324 | 64bit |
---|
ここで最大、最小でよくわからない記号が出てきましたね。
これは左辺の数値を10のn乗倍するという意味で、アバウトではありますが限りなく0に近い数値から限りなく巨大な数値までを表現することができます。
例えば、、、
double sample = 1.192e3;
上記は『1192』を浮動小数で表現したサンプルです。
みてわかる通り、左辺の桁が右辺の数値分ずれてるのがわかると思います。
double sample = 1.192e-3;
上記は『0.001192』を浮動小数で表現したサンプルです。
マイナスがつくことでマイナス10乗倍して数値を表現できます。
![ペンタ](./xxxdeta-box/xxxOLD/0001.png)
とても便利だね!
計算の誤差
一見とても便利そうな浮動小数型ですが、ある困った困ったことが1つだけあります。
これは困りますよね、、、
実際にどんな感じになるか確認してみましょう。
double doubleValue1 = 1.0d;
double doubleValue2 = 0.9d;
double resultValue = doubleValue1 - doubleValue2;
このコードですが、普通は『0.1』になるはずです、、
ですがコードを実行すると結果は下記のようになります。
0.09999999999999998
![チュンすけ](./xxxdeta-box/xxxOLD/0004.png)
なんでだーー
これは浮動小数型では正確な計算ができない特性があるためです。
仕組みに関してはここでは触れませんが、仕組み上仕方がなく且つJavaだけでなくプログラム全般でこのようなことが起きます。
※C言語でも、JavaScriptでもなんでもそうです
なのでこのこのような性質があることは頭の片隅に置いておきましょう。
もう一つの小数型
先ほど紹介したdouble型と同じく小数を扱える型がもう一つあります。
double型と違い、32bitの型なので扱える範囲は狭くなっています。
Javaのdouble型の範囲は下記の範囲です。
最小 | 最大 | ビット数 | ±3.40282347E+38 | 1.40239846E-45 | 32bit |
---|
型の宣言は下記の通りです。
float pi = 3.1415F;
float型を使う時には、コンパイラーにfloat型であることを知らせるために数字の後ろに『F』もしくは『f』をつけます。
double型の時と違い、自動的に『F、f』をつけてくれないため注意して使用しましょう。
※fをつけていない場合は、コンパイラーに怒られます
扱える数値の範囲以外は、double型と同じため使い分けが難しい型となっています。
まとめ
いかがでしたか?
今回はJavaの小数型についての紹介でした。
最後に要点をまとめてみます。
型 | 最小 | 最大 | ビット数 |
---|---|---|---|
double | ±1.79769313486231570E +308 | ±4.94065645841246544E -324 | 64bit |
float | ±3.40282347E+38 | 1.40239846E-45 | 32bit |
![ペンタ](./xxxdeta-box/xxxOLD/0001.png)
型は扱うデータの役割によって使い分けをしよう!
- 基本的にはdouble型
- 計算をする時は正確ではない場合がある
最低限Javaで数値を扱う時は上記2つを意識しておくといいかと思います。