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の単一フィールドが含まれます。さらにこのクラスは、
doubleをStringに、Stringをdoubleに変換する各種メソッドや、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
FloatやDoubleで足りない場合は、java.math.BigDecimalを用います。Double型オブジェクトは代入互換性を持ちません。但し、何れのクラスもNumberクラスを継承するので、Number型変数へは代入互換です