Developer

【はじめてのJava】基本データ型(小数型)【データ型と変数編】
2020.10.06
Lv1

【はじめてのJava】基本データ型(小数型)【データ型と変数編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


基本データ型(小数型)

プログラムの中で「変数」を使用する際に使用した「データ型」について詳しく解説していきます。

基本データ型編では、Javaで扱われるデータ型の中でも「基本データ型」と呼ばれる種類のデータ型について扱っていきます。
この記事では、「小数」を表す「基本データ型」についてを扱っていきます。

目次


基本データ型のおさらい

プログラムの中で、「変数」を扱う際などに、その変数に入るデータがどんなデータなのかを指定する必要がありました。
その際に「データ型」というものを使って、データの種類を表していました。
Javaでは、データ型には大きく分けて基本データ型(プリミティブ型)オブジェクト参照型(リファレンス型)の2種類があります。

基本データ型とは、プログラムの中で扱われるデータのうち、数字や文字などの、最も基本的なデータの種類を扱うことが出来るデータ型です。
表すデータ型として具体的に、「byte型」「short型」「int型」「long型」「float型」「double型」「char型」「boolean型」の8種類のデータ型が用意されています。
8種類の基本データ型を表にまとめると以下のようになります。

データ型 種類 データの幅 データの表現範囲
byte 整数 8ビット -128 ~ 127
short 整数 16ビット − 2の15乗~2の15乗 − 1
(-32,768 ~ 32,767)
int 整数 32ビット − 2の31乗~2の31乗 − 1
(-2,147,483,648 ~ 2,147,483,647)
long 整数 64ビット − 2の63乗~2の63乗 − 1
(-9,223,372,036,854,775,808L ~
9,223,372,036,854,775,807L)
float 浮動小数点数 32ビット IEEE 754 規格の単精度浮動小数点数
double 浮動小数点数 64ビット IEEE 754 規格の単精度浮動小数点数
char 文字 16ビット Unicode規格の1文字(\u0000~\uFFFF)
boolean 論理値 1ビット trueまたはfalse

※ビット数とはコンピュータのメモリ上で確保される桁数のことです。また同じような表現でバイト数というものがあります。一般的には8ビット=1バイトで扱われることが多いです。


小数型

今回は、小数を表す2つのデータ型について詳しく説明してきます。
Javaでは、小数(浮動小数点数)を扱うためのデータ型として、「double型」「float型」の2つがあります。
これらの2つのデータ型を比較すると、データのサイズが異なってます。
整数型の場合は、サイズの違いによって、格納できる数値の大きさが変化していましたが、小数型の場合はデータのサイズが変わることによって、格納するデータの数値の精度が異なっています。
プログラムで小数を扱う際に気を付けなければならないことは、プログラムの中で、「正確な数字を表現できないことがある」ということです。
(正確な数値を表現することが出来ない理由は<探究>を参照してください!)
正確な数字を表現できないことがあるので、金融などの厳密な計算が必要な時は使われないこともあります。


<探究>
プログラム上で、小数を表す時に、「浮動小数点数」という数値が用いられます。浮動小数点数とは、計算をする際に誤差が生まれることを前提とした数値のデータのことです。
何故、計算に誤差が発生するかというと、プログラム内でデータの表現に2進数を利用することが原因です。2進数で小数を表現する場合、
<2進数> <10進数>
 0.1  →  0.5
 0.01  →  0.25
 0.001 →  0.125
     …
のように次々に半分になっていく数を足した結果として表します。
10進数の0.5や0.75のようなぴったり表すことが出来る数なら問題ないのですが、それ以外の数はぴったりにできずに無限に小数が続くことがよくあります。
(例)10進数の「0.01」→2進数では「0.000000101000111101011100001010001111010111…(以下、この繰り返しがループ)」
この無限に続く数をコンピュータ内でそのまま保存することはできないので、途中で桁を打ち切って保存することになります。
これが原因で計算の際に誤差を生むことがあります。


double型

float型は、64ビットの符号付浮動小数点数を表すデータ型です。符号付とは+-がある数字のことです。
格納できるデータの範囲:IEEE 754 規格の倍精度浮動小数点数
(表現の方法が複雑なので、具体的な数値は書いていません)

※通常、プログラムの中で小数を扱う際は、Javaの中では特に指定がない場合、数値はdouble型として扱われます。
また、ソースコードの中で小数を書くと、自動的にdouble型の小数として判断されます。


float型

float型は、32ビットの符号付浮動小数点数を表すデータ型です。符号付とは+-がある数字のことです。
格納できるデータの範囲:IEEE 754 規格の単精度浮動小数点数
(表現の方法が複雑なので、具体的な数値は書いていません)
double型よりも利用するビット数が少ないので、double型よりも表すことが出来る数値の範囲が狭くなっています。

主にメモリの節約や、精度が必要ない場面では、計算速度を上昇させるために使われていたようです。
ですが、最近では、double型で計算を行うのが主流ですので、PCのCPUにdouble型で計算を行う専用の回路がついていることが多いため、内部の処理としてfloat型からdouble型に変換してから計算を行うという処理を行うため、float型の方が処理が遅いということもあるようです。

float型を利用する場合には、数字の最後に「F」または「f(小文字)」を付けることで、ソースコード中の数値がfloat型だと判断されます。
「F」や「f(小文字)」を付けないと、数値はdouble型と判断されて、コンパイルエラーになります。


//double型の場合はそのまま数字を書ける!
double d = 1.2345;

//float型の場合は数字に「F」または「f」をつけて書く!
float f = 1.2345F;


基本データ型編・次回の内容

今回は基本データ型の中でも「小数型」について扱いました。基本データ型編・次回は基本データ型の中の「文字型」の説明を行います。


はじめてのJavaシリーズの記事一覧はこちら
シリーズ全記事一覧
環境構築編
プログラムの作り方編
データ型と変数編


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら