JavaTM 2 Platform
Standard Ed. 5.0

java.lang
クラス Double

java.lang.Object
  上位を拡張 java.lang.Number
      上位を拡張 java.lang.Double
すべての実装されたインタフェース:
Serializable, Comparable<Double>

public final class Double
extends Number
implements Comparable<Double>

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

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

導入されたバージョン:
JDK1.0
関連項目:
直列化された形式

フィールドの概要
static double MAX_VALUE
          double 型の正の最大有限値 (2-2-52)·21023 です。
static double MIN_VALUE
          double 型の正の最小有限値 2-1074 です。
static double NaN
          double 型の非数 (NaN) 値を保持する定数です。
static double NEGATIVE_INFINITY
          double 型の負の無限大値を保持する定数です。
static double POSITIVE_INFINITY
          double 型の正の無限大値を保持する定数です。
static int SIZE
          double 値を表すのに使われるビット数
static Class<Double> TYPE
          double のプリミティブ型を表す Class インスタンスです。
 
コンストラクタの概要
Double(double value)
          プリミティブ double 引数を表す、新たに割り当てられる Double オブジェクトを構築します。
Double(String s)
          文字列で表される double 型の浮動小数点を表す、新しく割り当てられる Double オブジェクトを構築します。
 
メソッドの概要
 byte byteValue()
          この Double の値を (byte にキャストすることにより) byte として返します。
static int compare(double d1, double d2)
          指定された 2 つの double 値を比較します。
 int compareTo(Double anotherDouble)
          2 つの Double オブジェクトを数値的に比較します。
static long doubleToLongBits(double value)
          IEEE 754 浮動小数点の「ダブルフォーマット (double format)」ビットレイアウトに従って、指定された浮動小数点の値を表現して返します。
static long doubleToRawLongBits(double value)
          IEEE 754 浮動小数点の「ダブルフォーマット (double format)」ビットレイアウトに従って、非数 (NaN) 値を保持する、指定された浮動小数点値の表現を返します。
 double doubleValue()
          この Double オブジェクトの double 値を返します。
 boolean equals(Object obj)
          このオブジェクトを指定されたオブジェクトと比較します。
 float floatValue()
          この Double オブジェクトの float 値を返します。
 int hashCode()
          この Double オブジェクトのハッシュコードを返します。
 int intValue()
          この Double の値を (int 型にキャストすることにより) int として返します。
 boolean isInfinite()
          この Double 値の絶対値が無限量である場合には true を、そうでない場合には false を返します。
static boolean isInfinite(double v)
          指定された数値の絶対値が無限量である場合には true を、そうでない場合には false を返します。
 boolean isNaN()
          この Double 値が非数 (NaN) である場合には true を、そうでない場合は false を返します。
static boolean isNaN(double v)
          指定された数値が非数 (NaN) である場合には true を、そうでない場合は false を返します。
static double longBitsToDouble(long bits)
          指定されたビット表現と対応する double 値を返します。
 long longValue()
          この Double の値を (long 型にキャストすることにより) long として返します。
static double parseDouble(String s)
          Double クラスの valueOf メソッドを実行した場合と同様に、指定された String が表す値に初期化された新しい double 値を返します。
 short shortValue()
          この Double の値を (short にキャストすることにより) short として返します。
static String toHexString(double d)
          double 引数の 16 進数文字列表現を返します。
 String toString()
          この Double オブジェクトの文字列表現を返します。
static String toString(double d)
          double 引数の文字列表現を返します。
static Double valueOf(double d)
          指定した double 値を表す Double インスタンスを返します。
static Double valueOf(String s)
          文字列引数 s で表される double 値を保持する Double オブジェクトを返します。
 
クラス java.lang.Object から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

フィールドの詳細

POSITIVE_INFINITY

public static final double POSITIVE_INFINITY
double 型の正の無限大値を保持する定数です。Double.longBitsToDouble(0x7ff0000000000000L) によって返される値と同じです。

関連項目:
定数フィールド値

NEGATIVE_INFINITY

public static final double NEGATIVE_INFINITY
double 型の負の無限大値を保持する定数です。Double.longBitsToDouble(0xfff0000000000000L) によって返される値と同じです。

関連項目:
定数フィールド値

NaN

public static final double NaN
double 型の非数 (NaN) 値を保持する定数です。Double.longBitsToDouble(0x7ff8000000000000L) によって返される値と同じです。

関連項目:
定数フィールド値

MAX_VALUE

public static final double MAX_VALUE
double 型の正の最大有限値 (2-2-52)·21023 です。16 進数浮動小数点リテラル 0x1.fffffffffffffP+1023 と同等であり、Double.longBitsToDouble(0x7fefffffffffffffL) とも同等です。

関連項目:
定数フィールド値

MIN_VALUE

public static final double MIN_VALUE
double 型の正の最小有限値 2-1074 です。16 進数浮動小数点リテラル 0x0.0000000000001P-1022 と同等であり、Double.longBitsToDouble(0x1L) とも同等です。

関連項目:
定数フィールド値

SIZE

public static final int SIZE
double 値を表すのに使われるビット数

導入されたバージョン:
1.5
関連項目:
定数フィールド値

TYPE

public static final Class<Double> TYPE
double のプリミティブ型を表す Class インスタンスです。

導入されたバージョン:
JDK1.1
コンストラクタの詳細

Double

public Double(double value)
プリミティブ double 引数を表す、新たに割り当てられる Double オブジェクトを構築します。

パラメータ:
value - Double によって表される値

Double

public Double(String s)
       throws NumberFormatException
文字列で表される double 型の浮動小数点を表す、新しく割り当てられる Double オブジェクトを構築します。文字列は、valueOf メソッドと同様に double 値に変換されます。

パラメータ:
s - Double に変換する文字列
例外:
NumberFormatException - 文字列が構文解析可能な数値を含まない場合
関連項目:
valueOf(java.lang.String)
メソッドの詳細

toString

public static String toString(double d)
double 引数の文字列表現を返します。以下の文字はすべて ASCII 文字です。 m または a の小数部として出力する桁数を検討してみましょう。小数部を表す桁は 1 桁以上が必要です。double 型の隣接する値から引数を一意に識別するのに最低限必要な桁数にしてください。たとえば、ゼロでない有限の引数を指定してこのメソッドで作成した 10 進値表記を x とします。この場合、dxdouble 型の最近似値でなければなりません。つまり、2 つの double 値が均等に x に近似している場合であれば、d は 2 つの値のどちらかでなければならず、有効な最下位ビットは 0 でなければなりません。

浮動小数点値の地域対応された文字列表現を作成する場合、NumberFormat のサブクラスを使用します。

パラメータ:
d - 変換対象の double
戻り値:
この引数の文字列表現

toHexString

public static String toHexString(double d)
double 引数の 16 進数文字列表現を返します。以下の文字はすべて ASCII 文字です。

浮動小数点値16 進数文字列
1.0 0x1.0p0
-1.0 -0x1.0p0
2.0 0x1.0p1
3.0 0x1.8p1
0.5 0x1.0p-1
0.25 0x1.0p-2
Double.MAX_VALUE 0x1.fffffffffffffp1023
Minimum Normal Value 0x1.0p-1022
Maximum Subnormal Value 0x0.fffffffffffffp-1022
Double.MIN_VALUE 0x0.0000000000001p-1022

パラメータ:
d - 変換対象の double
戻り値:
引数の 16 進数文字列表現
導入されたバージョン:
1.5

valueOf

public static Double valueOf(String s)
                      throws NumberFormatException
文字列引数 s で表される double 値を保持する Double オブジェクトを返します。

snull の場合は、NullPointerException がスローされます。

s 内の先頭と末尾の空白文字は無視されます。空白文字は、String.trim() メソッドで削除されるときのように削除されます。つまり、ASCII の空白文字と制御文字の両方が削除されます。s の残りの文字が、次の字句構文規則に従って FloatValue を構成します。

FloatValue:
Signopt NaN
Signopt Infinity
Signopt FloatingPointLiteral
Signopt HexFloatingPointLiteral
SignedInteger

HexFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt

HexSignificand:
HexNumeral
HexNumeral .
0x HexDigitsopt . HexDigits
0X HexDigitsopt . HexDigits

BinaryExponent:
BinaryExponentIndicator SignedInteger

BinaryExponentIndicator:
p
P

ここで、SignFloatingPointLiteralHexNumeralHexDigitsSignedInteger、および FloatTypeSuffix『Java 言語仕様』の字句構造セクションの定義に従います。sFloatValue の形式でない場合、NumberFormatException がスローされます。そうでない場合、s は通常の「浮動小数点表記」、つまり正確な 10 進値または 16 進値を表していると見なされます。この正確な数値は、概念上は「無限に正確なバイナリ値」に変換されてから、IEEE 754 浮動小数点計算法による通常の最近似値丸め法 (ゼロ値の符号保持を含む) に従って double 型に丸められます。最後に、double 値を表す Double オブジェクトが返されます。

浮動小数点値の地域対応された文字列表現を解釈する場合、NumberFormat のサブクラスを使用します。

浮動小数点リテラルの型を決定する指示子の末尾形式指示子 (1.0ffloat 値、1.0ddouble 値) は、このメソッドの結果に影響を与えません。つまり、入力文字列の数値は、ターゲットの浮動小数点型に直接変換されます。文字列を float に変換し、floatdouble に変換する 2 段階のシーケンスは、文字列を double に変換するのと等価ではありません。たとえば、float リテラル 0.1fdouble0.10000000149011612 と等価ですが、float リテラル 0.1f は、double リテラル 0.1 とは別の数値を表します。数値 0.1 をバイナリ浮動小数点数で正確に表すことはできません。

無効な文字列でこのメソッドが呼び出されたり、NumberFormatException がスローされたりしないようにするには、以下の正規表現を使って入力文字列をスクリーニングすることができます。


        final String Digits     = "(\\p{Digit}+)";
  final String HexDigits  = "(\\p{XDigit}+)";
        // an exponent is 'e' or 'E' followed by an optionally 
        // signed decimal integer.
        final String Exp        = "[eE][+-]?"+Digits;
        final String fpRegex    =
            ("[\\x00-\\x20]*"+  // Optional leading "whitespace"
             "[+-]?(" + // Optional sign character
             "NaN|" +           // "NaN" string
             "Infinity|" +      // "Infinity" string

             // A decimal floating-point string representing a finite positive
             // number without a leading sign has at most five basic pieces:
             // Digits . Digits ExponentPart FloatTypeSuffix
             // 
             // Since this method allows integer-only strings as input
             // in addition to strings of floating-point literals, the
             // two sub-patterns below are simplifications of the grammar
             // productions from the Java Language Specification, 2nd 
             // edition, section 3.10.2.

             // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
             "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+

             // . Digits ExponentPart_opt FloatTypeSuffix_opt
             "(\\.("+Digits+")("+Exp+")?)|"+

       // Hexadecimal strings
       "((" +
        // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "(\\.)?)|" +

        // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

        ")[pP][+-]?" + Digits + "))" +
             "[fFdD]?))" +
             "[\\x00-\\x20]*");// Optional trailing "whitespace"
            
  if (Pattern.matches(fpRegex, myString))
            Double.valueOf(myString); // Will not throw NumberFormatException
        else {
            // Perform suitable alternative action
        }
 

パラメータ:
s - 構文解析される文字列
戻り値:
String 引数により表される値を保持する Double オブジェクト
例外:
NumberFormatException - 文字列が構文解析可能な数値を含まない場合

valueOf

public static Double valueOf(double d)
指定した double 値を表す Double インスタンスを返します。新規 Double インスタンスが不要な場合、通常このメソッドがコンストラクタ Double(double) に優先して使用されます。その理由は、このメソッドが頻繁に要求される値をキャッシュするので、操作に必要な領域や時間がはるかに少なくて済む場合が多いためです。

パラメータ:
d - double 値
戻り値:
d を表す Double インスタンス
導入されたバージョン:
1.5

parseDouble

public static double parseDouble(String s)
                          throws NumberFormatException
Double クラスの valueOf メソッドを実行した場合と同様に、指定された String が表す値に初期化された新しい double 値を返します。

パラメータ:
s - 構文解析される文字列
戻り値:
文字列引数で表される double
例外:
NumberFormatException - 文字列が構文解析可能な double 値を含まない場合
導入されたバージョン:
1.2
関連項目:
valueOf(String)

isNaN

public static boolean isNaN(double v)
指定された数値が非数 (NaN) である場合には true を、そうでない場合は false を返します。

パラメータ:
v - 判定される値
戻り値:
引数の値が NaN である場合は true、そうでない場合は false

isInfinite

public static boolean isInfinite(double v)
指定された数値の絶対値が無限量である場合には true を、そうでない場合には false を返します。

パラメータ:
v - 判定される値
戻り値:
引数が正または負の無限値の場合は true、そうでない場合は false

isNaN

public boolean isNaN()
この Double 値が非数 (NaN) である場合には true を、そうでない場合は false を返します。

戻り値:
このオブジェクトが表す値が NaN である場合は true、そうでない場合は false

isInfinite

public boolean isInfinite()
この Double 値の絶対値が無限量である場合には true を、そうでない場合には false を返します。

戻り値:
このオブジェクトが表す値が正の無限大または負の無限大である場合は true、そうでない場合は false

toString

public String toString()
この Double オブジェクトの文字列表現を返します。このオブジェクトが表すプリミティブ double 値は、1 つの引数を取る toString メソッドを実行した場合と同じ文字列に変換されます。

オーバーライド:
クラス Object 内の toString
戻り値:
このオブジェクトの String 表現
関連項目:
toString(double)

byteValue

public byte byteValue()
この Double の値を (byte にキャストすることにより) byte として返します。

オーバーライド:
クラス Number 内の byteValue
戻り値:
byte 型に変換されたこのオブジェクトが表す double
導入されたバージョン:
JDK1.1

shortValue

public short shortValue()
この Double の値を (short にキャストすることにより) short として返します。

オーバーライド:
クラス Number 内の shortValue
戻り値:
short 型に変換されたこのオブジェクトが表す double
導入されたバージョン:
JDK1.1

intValue

public int intValue()
この Double の値を (int 型にキャストすることにより) int として返します。

定義:
クラス Number 内の intValue
戻り値:
int 型に変換されたこのオブジェクトが表す double

longValue

public long longValue()
この Double の値を (long 型にキャストすることにより) long として返します。

定義:
クラス Number 内の longValue
戻り値:
long 型に変換されたこのオブジェクトが表す double

floatValue

public float floatValue()
この Double オブジェクトの float 値を返します。

定義:
クラス Number 内の floatValue
戻り値:
float 型に変換されたこのオブジェクトが表す double
導入されたバージョン:
JDK1.0

doubleValue

public double doubleValue()
この Double オブジェクトの double 値を返します。

定義:
クラス Number 内の doubleValue
戻り値:
このオブジェクトが表す double

hashCode

public int hashCode()
この Double オブジェクトのハッシュコードを返します。計算された結果は、doubleToLongBits(double) メソッドの結果とまったく同じように、この Double オブジェクトが表すプリミティブ double 値の long 整数をビット表現した上位 32 ビットと下位 32 ビットの排他的論理和になります。つまり、ハッシュコードは次の式の値です。
 (int)(v^(v>>>32))
ただし、v は次の式によって定義されます。
 long v = Double.doubleToLongBits(this.doubleValue());
 

オーバーライド:
クラス Object 内の hashCode
戻り値:
このオブジェクトの hash code
関連項目:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
このオブジェクトを指定されたオブジェクトと比較します。結果が true になるのは、引数が null でなく、このオブジェクトが表す double 値と同じ値を保持する double を表す Double オブジェクトである場合だけです。このため、2 つの double 値が等しいと見なされるのは、doubleToLongBits(double) メソッドを各値に適用したときに同一の long 値が返される場合だけです。

ほとんどの場合、Double クラスの d1 および d2 という 2 つのインスタンスについて、d1.equals(d2) の値が true になるのは、次の式の値が true になる場合だけです。

 d1.doubleValue() == d2.doubleValue() 

しかし、例外事項も 2 つあります。

この定義によって、ハッシュテーブルは正しく動作します。

オーバーライド:
クラス Object 内の equals
パラメータ:
obj - 比較対象のオブジェクト
戻り値:
オブジェクトが同じである場合は true、そうでない場合は false
関連項目:
doubleToLongBits(double)

doubleToLongBits

public static long doubleToLongBits(double value)
IEEE 754 浮動小数点の「ダブルフォーマット (double format)」ビットレイアウトに従って、指定された浮動小数点の値を表現して返します。

ビット 63 (マスク 0x8000000000000000L によって選択されるビット) は、浮動小数点の符号を表します。ビット 62-52 (マスク 0x7ff0000000000000L によって選択されるビット) は、指数を表します。ビット 51-0 (マスク 0x000fffffffffffffL によって選択されるビット) は、浮動小数点の有効値 (仮数と呼ばれる場合もある) を表します。

引数が正の無限大値の場合は、0x7ff0000000000000L が返されます。

引数が負の無限大値の場合は、0xfff0000000000000L が返されます。

引数が NaN の場合は、0x7ff8000000000000L が返されます。

どの場合も、返される値は long 整数であり、longBitsToDouble(long) メソッドを指定すると、doubleToLongBits への引数と同じ浮動小数点値になります (すべての NaN 値が単一の「正規」NaN 値に収納されることを除く)。

パラメータ:
value - double 精度の浮動小数点値
戻り値:
浮動小数点値を表すビット

doubleToRawLongBits

public static long doubleToRawLongBits(double value)
IEEE 754 浮動小数点の「ダブルフォーマット (double format)」ビットレイアウトに従って、非数 (NaN) 値を保持する、指定された浮動小数点値の表現を返します。

ビット 63 (マスク 0x8000000000000000L によって選択されるビット) は、浮動小数点の符号を表します。ビット 62-52 (マスク 0x7ff0000000000000L によって選択されるビット) は、指数を表します。ビット 51-0 (マスク 0x000fffffffffffffL によって選択されるビット) は、浮動小数点の有効値 (仮数と呼ばれる場合もある) を表します。

引数が正の無限大値の場合は、0x7ff0000000000000L が返されます。

引数が負の無限大値の場合は、0xfff0000000000000L が返されます。

引数が NaN の場合、返される値は実際の NaN 値を示す long 整数です。doubleToLongBits メソッドとは異なり、doubleToRawLongBits メソッドが、すべてのビットパターン符号化 NaN を単一の正規 NaN 値に収納することはありません。

どの場合も、返される値は long 整数であり、longBitsToDouble(long) メソッドを指定すると、doubleToRawLongBits への引数と同じ浮動小数点値になります。

パラメータ:
value - double 精度の浮動小数点値
戻り値:
浮動小数点値を表すビット

longBitsToDouble

public static double longBitsToDouble(long bits)
指定されたビット表現と対応する double 値を返します。引数は、IEEE 754 浮動小数点「倍精度」ビット配列に従った浮動小数点表現と見なされます。

引数が 0x7ff0000000000000L の場合は、正の無限大値が返されます。

引数が 0xfff0000000000000L の場合は、負の無限大値が返されます。

引数が 0x7ff0000000000001L0x7fffffffffffffffL、または 0xfff0000000000001L0xffffffffffffffffL の範囲内の値である場合、結果は NaN になります。Java の提供する IEEE 754 浮動小数点演算は、型が同じでビットパターンの異なる 2 つの NaN 値を区別できません。NaN の個別の値は、Double.doubleToRawLongBits を使用する場合にだけ識別可能です。

そのほかの場合では、se、および m の 3 つの値について次の引数から計算できるとします。

 int s = ((bits >>
 63) == 0) ? 1 :
 -1;
 int e = (int)((bits >>
 52) & 0x7ffL);
 long m = (e == 0) ? (bits & 0xfffffffffffffL) <<
 1 :
 (bits & 0xfffffffffffffL) | 0x10000000000000L;
この場合、浮動小数点値の結果は、数式 s·m·2e-1075 の値と等しくなります。

このメソッドは、long 引数とまったく同じビットパターンを持つ double NaN を返すことができない可能性があります。IEEE 754 では、2 種類の NaN (「シグナルを発生しない NaN」と「シグナルを発生する NaN」) を区別します。2 種類の NaN の違いは、通常 Java では確認できません。シグナルを発生する NaN での算術演算では、シグナルを発生する NaN が、異種でありながら同様のビットパターンを持つシグナルを発生しない NaN に変わります。ただし、シグナルを発生する NaN を単にコピーする一部のプロセッサも、この変換も行います。特に、シグナルを発生する NaN をコピーして、呼び出し側のメソッドに返すことで、この変換を実行できます。したがって、longBitsToDouble は、シグナルを発生する NaN ビットパターンを持つ double を返すことができない可能性があります。その結果、一部の long 値では、doubleToRawLongBits(longBitsToDouble(start)) は、start と等価ではない場合があります。加えて、どの特定のビットパターンがシグナルを発生する NaN を表すかは、プラットフォームによって異なります。シグナルを発生しないかシグナルを発生するかにかかわらず、すべての NaN は上に示す NaN の範囲になければなりません。

パラメータ:
bits - long 整数
戻り値:
同じビットパターンを持つ double 浮動小数点値

compareTo

public int compareTo(Double anotherDouble)
2 つの Double オブジェクトを数値的に比較します。このメソッドによる比較は、Java 言語の数値比較演算子 (<, <=, ==, >= >) をプリミティブ double 値に適用した場合とは、次の 2 点で異なります。 こうして、メソッドにより適用される Double オブジェクトの自然順序付けで、「equals との一貫性」が確保されます。

定義:
インタフェース Comparable<Double> 内の compareTo
パラメータ:
anotherDouble - 比較対象の Double
戻り値:
anotherDouble がこの Double と同じ数値の場合は値 0DoubleanotherDouble より小さい数値の場合は 0 より小さい値。DoubleanotherDouble より大きい数値の場合は 0 より大きい値
導入されたバージョン:
1.2

compare

public static int compare(double d1,
                          double d2)
指定された 2 つの double 値を比較します。返される整数値の符号は、次の呼び出しで返される整数の符号と同じになります。

    new Double(d1).compareTo(new Double(d2))
 

パラメータ:
d1 - 比較する最初の double
d2 - 比較する 2 番目の double
戻り値:
d1 の値が d2 と等しい場合は値 0d1 の値が d2 より小さい場合は 0 より小さい値、d1 の値が d2 より大きい場合は 0 より大きい値
導入されたバージョン:
1.4

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。