Double クラス

Revised: May/5th/2008; Since: Jan./1st/2002

64ビットIEEE 754浮動小数点数を表す基本データ型double型のラッパー・クラスです。double型とのボクシング変換がサポートされています。

クラス階層

java.lang.Object
  |
  +--java.lang.Number
        |
        +--java.lang.Double

親クラスNumberを継承しています。Number<のサブクラスは、AtomicInteger, AtomicLong, BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Shortです。これらのクラス型オブジェクトは、Number型変数に代入可能です。

概要

API 仕様では次のように説明されています:

Double クラスは、プリミティブ型 double の値をオブジェクトにラップします。Double 型のオブジェクトには、型が double の単一フィールドが含まれます。  

さらにこのクラスは、doubleString に、Stringdouble に変換する各種メソッドや、double の処理時に役立つ定数およびメソッドも提供します。

コンストラクタ

Integerクラスと同様に、Double型オブジェクトは、コンストラクタではなく、ボクシング変換かvalueOf(String s)を使うことが一般的です。

class TestDouble2 {
	public static void main(String[] args) {
		// メソッドvalueOf()
		Double d1 = Double.valueOf(args[0]);
		// オートボクシング
		Double d2 = 3.0e+8;	// 10進数指数表現
		Double d3 = 0x120p-4;	// 16進数表示
		System.out.println(d1);
		System.out.println(d2);
		System.out.println(d3);
	}
}

3.0e+8は、3×108を意味します。0x120p-4は、(120)16×2-4を意味します。

double型かString型を引数の持つコンストラクタも用意されています。しかし、J2SE 5.0以上では、オートボクシングがサポートされているので、使うことはないでしょう。

メソッド

メソッド、メンバ変数の詳細は API 仕様を直接ご確認ください。

Integer クラス と殆ど同じですが、 double 型の非数 (Not-a-Number) NaN と、正負の無限大 NEGATIVE_INFINITY, POSITIVE_INFINITY が追加されています。 Java では、 0 割り (zero-devision) が起こっても、コンパイルエラーも例外(Exception: 実行時エラー)も起こりません。

class TestDouble1 {
	public static void main(String args[]) {
		System.out.println("Double型の境界値");
		System.out.println("--MAX_VALUE--");
		System.out.println(Double.MAX_VALUE);
		System.out.println(Double.toHexString(Double.MAX_VALUE));
		System.out.println("--MIN_VALUE--");
		System.out.println(Double.MIN_VALUE);
		System.out.println(Double.toHexString(Double.MIN_VALUE));
		System.out.println("--MIN_NORMAL--");
		System.out.println(Double.MIN_NORMAL);
		System.out.println(Double.toHexString(Double.MIN_NORMAL));
		System.out.println("--MAX_EXPONENT--");
		System.out.println(Double.MAX_EXPONENT);
		System.out.println("--MIN_EXPONENT--");
		System.out.println(Double.MIN_EXPONENT);
	}
}
D:\java>javac TestDouble2.java

D:\java>java TestDouble2
Double型の境界値
--MAX_VALUE--
1.7976931348623157E308
0x1.fffffffffffffp1023
--MIN_VALUE--
4.9E-324
0x0.0000000000001p-1022
--MIN_NORMAL--
2.2250738585072014E-308
0x1.0p-1022
--MAX_EXPONENT--
1023
--MIN_EXPONENT--
-1022

D:\java>

サンプル

class TestInfinite {
	public static void main(String args[]) {
		double d1 = 0.5, d2 = 1.0/0.0;
		System.out.println("d1: " + d1);
		System.out.println("  =>" + Double.isInfinite(d1));
		System.out.println("d2: " + d2);
		System.out.println("  =>" + Double.isInfinite(d2));
	}
}

ここでは、静的メソッド isInfinite() を用いて、引数に与えた変数が発散しているかどうか判定しています。このメソッドはオーバーロードされており、引数を持たないメソッドは、 Double 型の参照型変数にラップされたオブジェクトの発散を判定します。

C:\Java>javac TestInfinite.java

C:\Java>java TestInfinite
d1: 0.5
  =>false
d2: Infinity
  =>true

FloatDoubleで足りない場合は、java.math.BigDecimalを用います。Double型オブジェクトは代入互換性を持ちません。但し、何れのクラスもNumberクラスを継承するので、Number型変数へは代入互換です



Copyright © 2001-2008 SUGAI, Manabu. All Rights Reserved.