Java
2022.06.10
Javaのdouble型の基本|int/Stringとの変換方法や使い方
2023.11.18

Javaプログラミング学習をするうえで、「doble型の基本は?」と悩んでいる方も多いのではないでしょうか?


「double型で扱える最大値・最小値はどれくらい?」

「int型やString型をdouble型に変換する方法は?」


といった疑問に対して、本記事ではdouble型について初心者エンジニア向けに詳しく解説していきます。


※本記事で紹介するサンプルコードは、Java18で動作確認しています。


1.Javaのdouble型とは?

Javaのdouble型は、小数を扱える基本データ型のひとつで、64ビットの浮動小数点形式で表現されます。doubleは最も広い範囲の値を扱えます。

①浮動小数点型とは?

浮動小数点とは、コンピュータの数値表現のひとつで、数値を仮数部と指数部に分割して表現する方式です。


例えば、以下のように表現されます。


14725000 = 1.4725 × (10の7乗)

147.25 = 1.4725 × (10の2乗)

 0.000014725 = 1.4725 × (10の-5乗)


この例では、1.4725が仮数部、10のべき乗が指数部を表しています。この表現方法により、限られたビット数で大きな値を表現できるのです。

②doubleとfloatの違い

double型と同様、float型も小数を扱うデータ型です。

double型が64ビットであったのに対して、float型は32ビットの浮動小数を表す基本データ型となります。


double型もfloat型も浮動小数点の国際標準規格「IEEE 754」に準拠しており、32ビットのfloat型では、符号が1ビット、指数が8ビット、仮数が23ビット。

64ビットのdouble型では、符号が1ビット、指数が11ビット、仮数が52ビットとなっています。

③doubleとDoubleの違い

doubleはJavaの基本データ型ですが、Doubleはクラスを表します。

Doubleクラスを使う例は、次のような時です。


・valueOfやparseDoubleなどDoubleが持つメソッドを使う場合

・値がnullの場合


単純に数値を保持するときはdouble、メソッドを使う場合はDoubleのような使い分けをするのがよいでしょう。



2.double型の最大値・最小値


Javaでdouble型の最大値・最小値を表す定数は、DoubleクラスのMAX_VALUEとMIN_VALUEです。


MAX_VALUE定数とMIN_VALUE定数を使用したサンプルコードで確認してみましょう。

public class App {
    public static void main(String[] args)  {
        double dblmax = Double.MAX_VALUE;
        double dblmin = Double.MIN_VALUE;
        
        //桁数指定
        System.out.println(dblmax);
        System.out.println(dblmin);
    }
}

実行結果

1.7976931348623157E308
4.9E-324

このとき、MIN_VALUEは負の最小値ではなく、0に最も近い正の数を表しています。ですので、double型の範囲は、“-MAX_VALUE 〜 MAX_VALUE”ということになります。



3.double型の基本的な使い方


この章では、double型の基本的な使い方について紹介します。

①初期化

変数の初期化とは、変数の宣言と同時に変数に値を代入することです。

書式は以下の通りです。

データ型 変数名 = 値;

サンプルコードで確認しましょう。

double dbl = 123456789;

初期化することで、変数に値が代入されていないのに変数を参照してしまう、といったバグを防止します。

②doubleのリテラルの書き方

double型変数へ代入できるリテラルは、以下の形式で書きます。


・10進数(整数、小数、指数)

・2進数(0b始まり、整数)

・8進数(0始まり、整数)

・16進数(0x始まり、整数)

public class App {
    public static void main(String[] args)  {
        //10進数の整数
        double dbl1 = 147;
        //10進数の小数点あり数字
        double dbl2 = 1.47;
        //10進数の指数表記
        double dbl3 = 1.47E2;
        //2進数
        double dbl4 = 0b10010011;
        //8進数
        double dbl5 = 0223;
        //16進数
        double dbl6 = 0x93;
       
        System.out.println(dbl1);
        System.out.println(dbl2);
        System.out.println(dbl3);
        System.out.println(dbl4);
        System.out.println(dbl5);
        System.out.println(dbl6);
    }
}

実行結果:

147.0
1.47
147.0
147.0
147.0
147.0

doubleは指数表現も利用できます。1.47E2は、1.47×10^2という意味です。

③double型の四則演算

doubleを使った四則演算は算術演算子の”+、-、*、/”を使用します。余りを求めるときは”%”を使います。


サンプルコードで確認してみましょう。

public class App {
    public static void main(String[] args)  {
        double x = 7;
        double y = 4;

        //足し算
        System.out.println(x + y);
        //引き算
        System.out.println(x - y);
        //掛け算
        System.out.println(x * y);
        //割り算
        System.out.println(x / y);
        //余り
        System.out.println(x % y);
    }
}

実行結果:

11.0
3.0
28.0
1.75
3.0




4.double型とint型の変換方法

この章では、double型を他のデータ型に変換する方法について見ていきましょう。

①double型からint型への変換

double型の値をint型に代入する場合には、明示的なキャストが必要です。

サンプルコードで解説します。

public class App {
    public static void main(String[] args)  {
        double dbl1 = 3.6;
        int i1 = (int)dbl1;
        System.out.println(i1);
    }
}

実行結果:

3

intは整数を扱うデータ型のため、”3.6”をint型に代入すると、小数点以下が切り捨てられ”3”になりました。

②int型からdouble型への変換

Int型の値をdouble型に代入する場合は、暗黙的な型変換が行われるので、型変換を記述する必要はありません。


ですが、ここでは型キャストを使用する方法と、Doubleラッパークラスを使用する方法を説明します。

public class App {
    public static void main(String[] args)  {
        int i = 369;
        //暗黙的に変換
        double dbl1 = i;
        //型キャストを利用して変換
        double dbl2 = (double)i;
        //Doubleラッパークラスでdoubleに変換
        double dbl3 = Double.valueOf(i);

        System.out.println(dbl1);
        System.out.println(dbl2);
        System.out.println(dbl3);
    }
}

実行結果:

369.0
369.0
369.0

どの方法でもdouble型に変換されているのがわかりますね。



5.double型とString型の変換方法


ここでは、double型とString型の変換方法について説明します。

①double型からString型への変換

double型をString型に変換するには、StringクラスのvalueOfメソッドを使用します。

サンプルコードで確認してみましょう。

public class App {
    public static void main(String[] args)  {
        double dbl1 = 2.58;
        //String型に変換
        String str1 = String.valueOf(dbl1);
        System.out.println(str1);
    }
}

実行結果:

2.58

valueOfメソッドの引数に、変換したい変数を記述するだけで完了です。

②String型からdouble型への変換

逆に、String型からdouble型に変換するには、DoubleクラスのparseDoubleメソッドを使用します。

サンプルコードは次の通りです。

public class App {
    public static void main(String[] args)  {
        String str1 = "2.58";
        //double型に変換
        double dbl1 = Double.parseDouble(str1);
        System.out.println(dbl1);
    }
}

実行結果:

2.58

parseDoubleメソッドの引数にString型の変数を指定するだけなので簡単ですね。ただし、str1がnullまたは数値として解析できない文字列の場合、変換できません。


コンパイルは通りますが、実行すると、”NullPointerException”または、”NumberFormatException”という例外が発生するので注意が必要です。



6.double型の大小比較方法


Javaでdouble型の大小比較するメソッドは、compareです。

compare(d1,d2)のように、2つのdoubleを引数として渡して、それらを比較し、結果を返します。


サンプルコードで確認してみましょう。

public class App {
    public static void main(String[] args)  {
        double dbl1 = 147;
        double dbl2 = 258;
        double dbl3 = 147;

        System.out.println(Double.compare(dbl1, dbl2));
        System.out.println(Double.compare(dbl1, dbl3));
        System.out.println(Double.compare(dbl2, dbl3));
    }
}

実行結果

-1
0
1

compareメソッドの戻り値は以下の通りです。


・1番目の引数が2番目の引数より小さい場合:-1

・2つの引数が等しい場合:0

・1番目の引数が2番目の引数より大きい場合:1



7.double型の表示形式の指定方法


この章では、double型の切り捨て方法や四捨五入、桁数指定方法を見ていきましょう。

①double型の切り捨て

Javaで小数点の切り捨てを行うには、Mathクラスのfloorメソッドを使用します。

サンプルコードで確認しましょう。

public class App {
    public static void main(String[] args)  {
        double dbl1 = 14.723;
        
        //切り捨て
        System.out.println(Math.floor(dbl1));
    }
}

実行結果:

14.0

実行結果から、14.723の小数点が切り捨てられ、14.0になったことがわかりますね。

②double型の四捨五入

Javaで四捨五入を行うには、Mathクラスのroundメソッドを使用します。

サンプルコードを見てみましょう。

public class App {
    public static void main(String[] args)  {
        double dbl1 = 14.7876;
        
        //小数点第1位を四捨五入
        System.out.println(Math.round(dbl1));
        //小数点第2位を四捨五入
        System.out.println(Math.round(dbl1*10.0)/10.0);
        //小数点第4位を四捨五入
        System.out.println(Math.round(dbl1*1000.0)/1000.0);
    }
}

実行結果:

15
14.8
14.788

小数点第2位を四捨五入する場合、以下の操作を行っています。

  1. 対象の値に10を掛ける (14.7876 * 10 = 147.876)
  2. Roundメソッドで小数点以下で四捨五入する。(147.876 → 148)
  3. 対象の値を10で割る (148 / 10 = 14.8)

③double型の桁数指定

小数点以下の桁数を指定し表示するには、String.formatメソッドを使用します。

サンプルコードで確認してみましょう。

public class App {
    public static void main(String[] args)  {
        //2の平方根を求める
        double dbl1 = Math.sqrt(2);
        
        //そのまま表示
        System.out.println(dbl1);
        //小数点第2位までを表示
        System.out.println(String.format("%.2f", dbl1));
        //小数点第6位までを表示
        System.out.println(String.format("%.6f", dbl1));
    }
}

実行結果:

1.4142135623730951
1.41
1.414214



この記事をシェア