クラスDouble
- すべての実装されたインタフェース:
Serializable,Comparable<Double>,Constable,ConstantDesc
Doubleクラスは、プリミティブ型doubleの値の「ラッパー・クラス」です。 Double型のオブジェクトには、型がdoubleの単一フィールドが含まれます。
さらにこのクラスは、doubleをStringに、Stringをdoubleに変換する各種メソッドや、doubleの処理時に役立つ定数およびメソッドも提供します。
これはvalue-basedクラスです。プログラマは、equalのインスタンスを交換可能として扱い、同期にインスタンスを使用しないようにする必要があります。そうしないと、予期しない動作が発生する可能性があります。 たとえば、将来のリリースでは、同期が失敗する可能性があります。
浮動小数点等価、等価および比較
IEEE 754浮動小数点値には、有限ゼロ以外の値、符号付きゼロ (+0.0および-0.0)、符号付きインフィニティ (「正の無限大」と「負の無限大」)、およびNaN (not-a-number)が含まれます。
値セットに対する「等価関係」は、再帰的、対称的および推移的の値のペアに対するブール関係です。 等価関係とオブジェクト等価の詳細は、Object.equals仕様を参照してください。 等価関係は、操作する値を「同等クラス」というセットにパーティション化します。 等価クラスのすべてのメンバーは、関係の下で相互に等しくなります。 等価クラスには、1つのメンバーのみを含めることができます。 一部の目的では、同等クラスのすべてのメンバーが互いに置換可能です。 特に、数値の式の等価値は、式の結果を変更することなく、互いに「置き換え」にすることができます。つまり、式の結果の等価クラスを変更します。
浮動小数点値に対する組込みの==操作は、等価関係ではありません。 等価関係を定義していないにもかかわらず、IEEE 754 ==演算子のセマンティクスは、他の数値計算ニーズを満たすように意図的に設計されました。 浮動小数点値に対して ==で等価関係のプロパティが満たされないという2つの例外があります:
v1とv2の両方がNaNの場合、v1 == v2の値はfalseです。 したがって、2つのNaN引数では、等価関係のreflexiveプロパティは==演算子によって満たされません。v1が+0.0を表し、v2が-0.0、またはその逆の場合は、+0.0と-0.0が様々な浮動小数点演算で区別される場合でも、v1 == v2の値はtrueになります。 たとえば、1.0/+0.0は正の無限大と評価され、1.0/-0.0はnegativeの無限大と正の無限大に評価され、負の無限大は互いに等しくありません。 したがって、符号付きゼロ入力は、通常、ゼロ結果の符号を決定します。これは、ゼロで除算すると、+0.0と-0.0が一般的には相互に置換されないためです。 0(ゼロ)入力の符号は、数学ライブラリのメソッドの結果に置換えられない効果もあります。
組込みの比較演算子(<, <=, etc.)を使用した順序比較の場合、NaNの値には別の異常な状況があります: NaNは、それ自体を含め、それより小さくも、それ以上でも、どの値でもありません。 これは、「比較の抜本的な」が保持されないことを意味します。
equalsおよびcompareToメソッドに適切なセマンティクスを提供するために、これらのメソッドは、単に==または順序付けされた比較操作を囲むことはできません。 かわりに、equalsは「表現等価」を使用し、NaN引数を互いに等しくなるように定義し、再帰性をリストアし、+0.0を-0.0と等しくないように定義します。 比較の場合、compareToは、-0.0が+0.0より小さく、NaNがそれ自体と等しく、正の無限大より大きいとみなされる合計順序を定義します。
equalsおよび compareToの動作セマンティクスは、「ビット単位変換」によって整数値への浮動小数点値で表されます。
compareToによって実装される「自然順序付け」は、「等しい」です。 つまり、2つのオブジェクトがequalsと等しいとレポートされるのは、それらのオブジェクトのcompareToが0を返す場合のみです。
equalsおよび compareToに定義された調整済動作により、ラッパー・クラスのインスタンスは従来のデータ構造で適切に動作できます。 たとえば、NaNの値をequalsとして定義すると、NaNをHashSetの要素またはHashMapのキーとして使用できます。 同様に、 compareToを+0.0、 -0.0、NaNなどの合計順序として定義すると、ラッパー・クラスのインスタンスをSortedSetの要素またはSortedMapのキーとして使用できます。
数値等価と、浮動小数点値に対して定義できるさまざまな有用な等価関係を比較します:
- 「数値の等価」 (
==演算子): (等価関係ではありません) - 2つの浮動小数点値は、同じ拡張実数を表します。 拡張実数は、正の無限大および負の無限大で拡張された実数です。 数値等価では、
+0.0と-0.0は両方とも同じ実数値0にマップされるため等しくなります。 NaNは、どの実数にもマップされず、それ自体を含むどの値にも等しくありません。 - ビット単位の等価性:
- 2つの浮動小数点値のビットは同じです。
double値aおよびbに対するこの等価関係は、式によって実装されますDouble.doubleToRawLongBits(a) == Double.doubleToRawLongBits(b)
この関係では、+0.0と-0.0は相互に区別され、NaNのビット・パターン・エンコーディングは、NaNのその他のビット・パターン・エンコーディングとは区別されます。 - 表現等価:
- 2つの浮動小数点値は、同じIEEE 754 「データム」を表します。 特に、「有限」値の場合、浮動小数点値の符号、「指数」、および重要なコンポーネントは同じです。 この関係の下:
-
+0.0と-0.0は相互に区別されます。 - NaNのビット・パターン・エンコーディングは、相互に同等とみなされます
- 正の無限大は正の無限大に相当し、負の無限大は負の無限大に相当します。
Double.doubleToLongBits(a) == Double.doubleToLongBits(b)Double.valueOf(a).equals(Double.valueOf(b))Double.compare(a, b) == 0
-
aおよびbでは、aとbのどちらもゼロまたはNaNでない場合、aとbの3つの関係の数値等価性、ビット単位等価性および表現等価性は同じtrue/false値になります。 つまり、2進浮動小数点値の場合、少なくとも1つの引数が0またはNaNの場合のみ、3つの関係は異なります。
小数点↔バイナリ変換の問題
2進浮動小数点演算の多くの驚くべき結果は、10進から2進への変換および2進から10進への変換の側面まで遡ります。 整数値は任意の基数で正確に表すことができますが、基数で正確に表すことができる小数値は基数の関数です。 たとえば、ベース10では、1/3は繰返し小数(0.33333....)ですが、ベース3では、1/3は正確に0.1(3)、つまり1×3-1です。 同様に、基本10では、1/10は0.1 (1 × 10-1)として正確に表現できますが、基本2では繰返しfraction(0.0001100110011...(2))です。float型の値は24ビットの精度を持ち、double型の値は53ビットの精度を持ちます。 したがって、0.1は、4ビット繰返しのベース2の繰返し分数であるため、 0.1f != 0.1dです。 16進浮動小数点リテラルを含む詳細:
0.1f(0x1.99999a0000000p-4f)の正確な数値は、0.100000001490116119384765625です。0.1d(0x1.999999999999ap-4d)の正確な数値は、0.1000000000000000055511151231257827021181583404541015625です。
floatおよびdouble値です。 これらの結果は、小数点精度が6から9桁に相当するfloat値と、小数点精度が15から17桁に相当するdouble値と一致しています。 (等価精度は、実数行に沿った異なる点での、2進値と10進値の相対密度によって異なります。)
この表現の10進数の危険性は、金額値をfloatまたは doubleとして格納する際の注意事項を使用する理由の1つです。 代替方法は次のとおりです。
BigDecimalを使用して小数値を正確に格納します。- 金額が整数になるようにスケール・アップ - たとえば、値がセントで示されている場合は100を乗算し、値がミルで示されている場合は1000を乗算します。 - 次に、そのスケールされた値を整数型に格納します。
有限浮動小数点値と指定された浮動小数点型ごとに、その値にマップされる実数行の連続したリージョンがあります。 デフォルトの丸めから最も近い丸めポリシー(JLS 15.4)では、値のこの連続するリージョンは、通常、幅が1つのulp (最後の場所の単位)で、正確に表現可能な値を中心にしています。 (指数境界では、リージョンは非対称で、大きい指数を持つ側では大きくなります。) たとえば、0.1fの場合、リージョンは次のように計算できます。
//リストされる数値は正確な値です
oneTenthApproxAsFloat = 0.100000001490116119384765625;
ulpOfoneTenthApproxAsFloat = Math.ulp(0.1f) = 7.450580596923828125E-9;
// 0.1、_excludes_ endpoints
(oneTenthApproxAsFloat - ½ulpOfoneTenthApproxAsFloat, oneTenthApproxAsFloat + ½ulpOfoneTenthApproxAsFloat) =
(0.0999999977648258209228515625, 0.1000000052154064178466796875)に最も近いfloatに変換される数値範囲
特に、この範囲の数値を表す文字列の、正しく丸められた10進数から2進数への変換(Float.parseFloat(String)など)は、同じ値に変換されます。
Float.parseFloat("0.0999999977648258209228515625000001"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.099999998"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.1"); // rounds up to oneTenthApproxAsFloat
Float.parseFloat("0.100000001490116119384765625"); // exact conversion
Float.parseFloat("0.100000005215406417846679687"); // rounds down to oneTenthApproxAsFloat
Float.parseFloat("0.100000005215406417846679687499999"); // rounds down to oneTenthApproxAsFloat
同様に、0.1dへのdouble近似値と Math.ulp(0.1d)の数値、およびfloat型とdouble型のその他の特定の数値に基づいて、 double型に類似した範囲を構築できます。
前述の変換に示すように、丸めなしで操作が持つ正確な数値と比較すると、結果として同じ浮動小数点値は次のようになります。
- 正確な結果より大きい
- 正確な結果と等しい
- 正確な結果より小さい
0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f + 0.1f;
// Numerical value of computed sum: 1.00000011920928955078125,
// the next floating-point value larger than 1.0f, equal to Math.nextUp(1.0f).
0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d + 0.1d;
// Numerical value of computed sum: 0.99999999999999988897769753748434595763683319091796875,
// the next floating-point value smaller than 1.0d, equal to Math.nextDown(1.0d).
double d = 0.0;
while (d != 1.0) { // Surprising infinite loop
d += 0.1; // Sum never _exactly_ equals 1.0
}
double d = 0.0;
for (int i = 0; i < 10; i++) {
d += 0.1;
} // Value of d is equal to Math.nextDown(1.0).
<, <=, >, >=)を使用して浮動小数点制限に対してテストします。
double d = 0.0;
while (d <= 1.0) {
d += 0.1;
} // Value of d approximately 1.0999999999999999
- Java言語仕様を参照してください:
-
「4.2.3 浮動小数点のタイプと値」
「4.2.4 浮動小数点演算」
「15.21.1 数値等価演算子==および!=」
「15.20.1 数値比較演算子<、<=、>および>=」 - 導入されたバージョン:
- 1.0
- 外部仕様
- 関連項目:
-
フィールドのサマリー
フィールド修飾子と型フィールド説明static final intdouble値8を表すために使用されるバイト数。static final int有限double変数に1023を指定できる最大指数。static final doubledouble型の正の最大有限値(2-2-52)·21023です。static final int正規化されたdouble変数の最小指数は、 -1022です。static final doubledouble型の正の最小標準値2-1022を保持する定数です。static final doubledouble型の正の最小非ゼロ値2-1074を保持する定数です。static final doubledouble型の非数(NaN)値を保持する定数です。static final doubledouble型の負の無限大値を保持する定数です。static final doubledouble型の正の無限大値を保持する定数です。static final intdouble値53の重要度のビット数。static final intdouble値64を表すために使用されるビット数。プリミティブ型doubleを表すClassインスタンス。 -
コンストラクタのサマリー
コンストラクタ -
メソッドのサマリー
修飾子と型メソッド説明byteこのDoubleの縮小プリミティブ変換後の値をbyteとして返します。static intcompare(double d1, double d2) 指定された2つのdouble値を比較します。int2つのDoubleオブジェクトを数値的に比較します。このインスタンス自体の名目記述子を含むOptionalを返します。static longdoubleToLongBits(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、指定された浮動小数点の値を表現して返します。static longdoubleToRawLongBits(double value) IEEE 754浮動小数点の「ダブル・フォーマット(double format)」ビット・レイアウトに従って、非数(NaN)値を保持する、指定された浮動小数点値の表現を返します。doubleこのDoubleオブジェクトのdouble値を返します。booleanこのオブジェクトと指定されたオブジェクトを比較します。floatこのDoubleの縮小プリミティブ変換後の値をfloatとして返します。inthashCode()このDoubleオブジェクトのハッシュ・コードを返します。static inthashCode(double value) Double.hashCode()との互換性がある、double値のハッシュ・コードを返します。intintValue()このDoubleの縮小プリミティブ変換後の値をintとして返します。static booleanisFinite(double d) 引数が有限の浮動小数点値である場合はtrueを返し、そうでない場合(NaNおよび無限大の引数の場合)はfalseを返します。booleanこのDouble値の絶対値が無限量である場合にはtrueを、そうでない場合にはfalseを返します。static booleanisInfinite(double v) 指定された数値の絶対値が無限量である場合にはtrueを、そうでない場合にはfalseを返します。booleanisNaN()このDouble値が非数(NaN)である場合にはtrueを、そうでない場合はfalseを返します。static booleanisNaN(double v) 指定された数値が非数(NaN)である場合にはtrueを、そうでない場合はfalseを返します。static doublelongBitsToDouble(long bits) 指定されたビット表現と対応するdouble値を返します。longこのDoubleの縮小プリミティブ変換後の値をlongとして返します。static doublemax(double a, double b) Math.maxを呼び出した場合と同様に、2つのdouble値の大きいほうを返します。static doublemin(double a, double b) Math.minを呼び出した場合と同様に、2つのdouble値の小さいほうを返します。static doubleDoubleクラスのvalueOfメソッドを実行した場合と同様に、指定されたStringが表す値に初期化された新しいdouble値を返します。このインスタンスをConstantDescとして解決します。その結果がインスタンス自体です。shortこのDoubleの縮小プリミティブ変換後の値をshortとして返します。static doublesum(double a, double b) +演算子のように、2つのdouble値を加算します。static StringtoHexString(double d) double引数の16進数文字列表現を返します。toString()このDoubleオブジェクトの文字列表現を返します。static StringtoString(double d) double引数の文字列表現を返します。static DoublevalueOf(double d) 指定されたdouble値を表すDoubleインスタンスを返します。static Double文字列引数sで表されるdouble値を保持するDoubleオブジェクトを返します。
-
フィールド詳細
-
POSITIVE_INFINITY
public static final double POSITIVE_INFINITYdouble型の正の無限大値を保持する定数です。 これは、Double.longBitsToDouble(0x7ff0000000000000L)から返される値と等しくなります。- 関連項目:
-
NEGATIVE_INFINITY
public static final double NEGATIVE_INFINITYdouble型の負の無限大値を保持する定数です。 これは、Double.longBitsToDouble(0xfff0000000000000L)から返される値と等しくなります。- 関連項目:
-
NaN
public static final double NaNdouble型の非数(NaN)値を保持する定数です。 これは、Double.longBitsToDouble(0x7ff8000000000000L)によって返される値に対してequivalentです。- 関連項目:
-
MAX_VALUE
public static final double MAX_VALUEdouble型の正の最大有限値(2-2-52)·21023です。 16進数浮動小数点リテラル0x1.fffffffffffffP+1023と同等であり、Double.longBitsToDouble(0x7fefffffffffffffL)とも同等です。- 関連項目:
-
MIN_NORMAL
public static final double MIN_NORMALdouble型の正の最小標準値2-1022を保持する定数です。 16進数浮動小数点リテラル0x1.0p-1022と同等であり、Double.longBitsToDouble(0x0010000000000000L)とも同等です。- 導入されたバージョン:
- 1.6
- 関連項目:
-
MIN_VALUE
public static final double MIN_VALUEdouble型の正の最小非ゼロ値2-1074を保持する定数です。 16進数浮動小数点リテラル0x0.0000000000001P-1022と同等であり、Double.longBitsToDouble(0x1L)とも同等です。- 関連項目:
-
SIZE
public static final int SIZEdouble値64を表すために使用されるビット数。- 導入されたバージョン:
- 1.5
- 関連項目:
-
PRECISION
public static final int PRECISIONdouble値53の重要度のビット数。 これは、「Java言語仕様」のセクション4.2.3のパラメータNです。- 導入されたバージョン:
- 19
- 関連項目:
-
MAX_EXPONENT
public static final int MAX_EXPONENT有限double変数に1023を指定できる最大指数。 これは、Math.getExponent(Double.MAX_VALUE)から返される値と等しくなります。- 導入されたバージョン:
- 1.6
- 関連項目:
-
MIN_EXPONENT
public static final int MIN_EXPONENT正規化されたdouble変数の最小指数は、 -1022です。 これは、Math.getExponent(Double.MIN_NORMAL)から返される値と等しくなります。- 導入されたバージョン:
- 1.6
- 関連項目:
-
BYTES
public static final int BYTESdouble値8を表すために使用されるバイト数。- 導入されたバージョン:
- 1.8
- 関連項目:
-
TYPE
-
-
コンストラクタの詳細
-
Double
@Deprecated(since="9", forRemoval=true) public Double(double value) 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このコンストラクタを使用することはほとんどありません。 静的ファクトリvalueOf(double)は、より良いスペースと時間のパフォーマンスをもたらす可能性が高いため、通常はより良い選択です。プリミティブのdouble引数を表す、新しく割り当てられたDoubleオブジェクトを構築します。- パラメータ:
value-Doubleによって表される値。
-
Double
@Deprecated(since="9", forRemoval=true) public Double(String s) throws NumberFormatException 削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。このコンストラクタを使用することはほとんどありません。 文字列をdoubleプリミティブに変換するにはparseDouble(String)を使用し、文字列をDoubleオブジェクトに変換するにはvalueOf(String)を使用します。文字列で表されるdouble型の浮動小数点を表す、新しく割り当てられるDoubleオブジェクトを構築します。 文字列は、valueOfメソッドと同様にdouble値に変換されます。- パラメータ:
s-Doubleに変換する文字列。- スロー:
NumberFormatException- 文字列が解析可能な数値を含まない場合。
-
-
メソッドの詳細
-
toString
public static String toString(double d) double引数の文字列表現を返します。 次の文字はすべてASCII文字です。- 引数がNaNの場合、変換後の文字列は「
NaN」。 - そうでない場合、結果は、引数の符号および絶対値を表す文字列になります。 符号が負の場合、結果の文字列の最初の文字は「
-」('\u002D')となり、符号が正の場合、結果の文字列に符号文字は表示されない。 絶対値mについては、次のとおり:- mが無限大の場合、これは文字列
"Infinity"で表される。したがって、正の無限大の結果は"Infinity"、負の無限大の結果は"-Infinity"となる。 - mがゼロの場合、これは文字列
"0.0"で表される。したがって、負のゼロの結果は"-0.0"、正のゼロの結果は"0.0"となる。 - それ以外の場合、mは正で有限です。 次の2つの段階で文字列に変換されます:
- 小数点以下の選択: mを表すために、適切に定義された小数点dmが選択されています。 この小数点は、IEEE 754浮動小数点演算の最も近い端数処理ポリシーに従ってmに四捨五入される(ほとんど)です。
- 文字列としての書式設定: 10進数のdmは、値に応じてプレーンまたはコンピュータ化された科学表記で文字列として書式設定されます。
- mが無限大の場合、これは文字列
「小数」は、sが10の倍数でないように、一部の(一意)整数s > 0およびiに対するs×10iという形式の数です。 これらの整数は、それぞれ小数の「仮数」および「指数」です。 小数点のlengthは、10n-1 ≤ s < 10nに一致する(一意)正の整数nです。
有限正のmの小数dmは次のように定義されます:
- IEEE 754浮動小数点演算の通常の「四捨五入」丸めポリシーに従って、Rをmに丸めるすべての小数点のセットにします。
- pは、Rのすべての小数点以下の最小長にします。
- p≥2の場合、Tを長さpのR内のすべての小数点のセットにします。 それ以外の場合は、Tを長さ1または2のR内のすべての小数点のセットにします。
- dmを、mに最も近いTの小数として定義します。 または、Tにこのような小数が2つある場合は、偶数の仮数を持つ小数を選択します。
選択した(独自)の小数点dmが書式設定されます。 s、iおよびnをそれぞれdmの仮数、指数および長さとします。 さらに、e = n + iとします - s1…snをsの通常の10進展開にします。 s1≠0およびsn≠0に注意してください。 下の小数点
'.'は'\u002E'で、指数インジケータ'E'は'\u0045'です。- ケース -3 ≤ e < 0: dmは、
0.0…0としてフォーマットされますs1…sn。小数点とs1の間に正確に -(n + i)ゼロがあります。 たとえば、123×10-4は0.0123とフォーマットされます。 - ケース0 ≤ e < 7:
- サブケースi ≥0: dmは、s1…snとしてフォーマットされます
0…0.0。snと小数点の間に正確にiゼロがあります。 たとえば、123×102は12300.0とフォーマットされます。 - サブケースi < 0: dmは、s1…としてフォーマットされますsn+i
.sn+i+1…sn、ここで小数点の右に正確に-i桁あります。 たとえば、123×10-1は12.3とフォーマットされます。
- サブケースi ≥0: dmは、s1…snとしてフォーマットされます
- ケースe < -3またはe ≥7: コンピュータ化された科学表記法を使用して、dmをフォーマットします。 ここで、eは
Integer.toString(int)によってフォーマットされます。- サブケースn = 1: dmは、s1
.0Eeとしてフォーマットされます。 たとえば、1×1023は1.0E23とフォーマットされます。 - サブケースn > 1: dmは、s1
.s2としてフォーマットされます…snEe。 たとえば、123×10-21は1.23E-19とフォーマットされます。
- サブケースn = 1: dmは、s1
浮動小数点値のローカライズされた文字列表現を作成する場合、
NumberFormatのサブクラスを使用します。- APIのノート:
- このメソッドは、IEEE 754で定義されたconvertToDecimalCharacter操作の一般的な機能に対応します。ただし、この操作は、変換で使用される有効桁数を指定する点で定義されます。 Javaプラットフォームでこのような変換を行うコードには、
doubleをBigDecimalに正確に変換してから、BigDecimalを必要な桁数に丸めるコードが含まれます。サンプル・コード:double d = 0.1; int digits = 25; BigDecimal bd = new BigDecimal(d); String result = bd.round(new MathContext(digits, RoundingMode.HALF_UP)); // 0.1000000000000000055511151 - パラメータ:
d- 変換するdouble。- 戻り値:
- この引数の文字列表現。
- 引数がNaNの場合、変換後の文字列は「
-
toHexString
public static String toHexString(double d) double引数の16進数文字列表現を返します。 次の文字はすべてASCII文字です。- 引数がNaNの場合、変換後の文字列は「
NaN」。 - そうでない場合、変換後の文字列は引数の符号と絶対値を表す。 符号が負の場合、結果の文字列の最初の文字は「
-」('\u002D')となり、符号が正の場合、結果の文字列に符号文字は表示されない。 絶対値mについては、次のとおり:- mが無限大の場合、これは文字列
"Infinity"で表される。したがって、正の無限大の結果は"Infinity"、負の無限大の結果は"-Infinity"となる。 - mがゼロの場合、これは文字列
"0x0.0p0"で表される。したがって、負のゼロの結果は"-0x0.0p0"、正のゼロの結果は"0x0.0p0"となる。 - mが正規化された表現の
double値の場合は、有効数字と指数のフィールドを表すのに部分文字列が使われる。 有効数字は、文字列"0x1."と、小数部として残りの有効数字の小文字の16進表現を続けて表される。 すべての桁が0でないかぎり(すべてが0の場合は単一の0を使用)、16進表現の末尾の0は削除される。 次に、指数は、指数値でInteger.toStringを呼び出して生成するときのように、"p"とそれに続く完全な指数の10進数文字列で表される。 - mが非正規表現の
double値の場合、有効数字は、文字列"0x0."と、小数部として残りの有効数字の16進表現を続けて表される。 16進表現の末尾の0は削除されます。 次に、指数は"p-1022"で表される。 サブノーマル有効数字内に、ゼロでない数字が1つ以上存在する必要があることに留意してください。
- mが無限大の場合、これは文字列
例 浮動小数点値 16進数文字列 1.00x1.0p0-1.0-0x1.0p02.00x1.0p13.00x1.8p10.50x1.0p-10.250x1.0p-2Double.MAX_VALUE0x1.fffffffffffffp1023Minimum Normal Value0x1.0p-1022Maximum Subnormal Value0x0.fffffffffffffp-1022Double.MIN_VALUE0x0.0000000000001p-1022- APIのノート:
- このメソッドは、IEEE 754で定義されたconvertToHexCharacter操作に対応します。
- パラメータ:
d- 変換するdouble。- 戻り値:
- この引数の16進数の文字列表現。
- 導入されたバージョン:
- 1.5
- 引数がNaNの場合、変換後の文字列は「
-
valueOf
public static Double valueOf(String s) throws NumberFormatException 文字列引数sで表されるdouble値を保持するDoubleオブジェクトを返します。sがnullの場合、NullPointerExceptionがスローされます。s内の先頭と末尾の空白文字は無視されます。 空白文字は、String.trim()メソッドで削除されるときのように削除されます。つまり、ASCIIの空白文字と制御文字の両方が削除されます。sの残りの文字が、次の字句構文ルールに従ってFloatValueを構成します。
ここで、Sign、FloatingPointLiteral、HexNumeral、HexDigits、SignedInteger、およびFloatTypeSuffixは、「Java言語仕様」の字句構造セクションで定義されていますが、これらの桁間のアンダースコアは受け入れられません。- FloatValue:
- Signopt
NaN- Signopt
Infinity- Signopt FloatingPointLiteral
- Signopt HexFloatingPointLiteral
- SignedInteger
- Signopt
- HexFloatingPointLiteral:
- HexSignificand BinaryExponent FloatTypeSuffixopt
- HexSignificand:
- HexNumeral
- HexNumeral
.0xHexDigitsopt.HexDigits0XHexDigitsopt.HexDigits - HexNumeral
- BinaryExponent:
- BinaryExponentIndicator SignedInteger
- BinaryExponentIndicator:
pP
sの形式がFloatValueでない場合は、NumberFormatExceptionがスローされます。 そうでない場合、sは通常の「浮動小数点表記」、つまり正確な10進値または16進値を表していると見なされます。この正確な数値は、概念上は「無限に正確なバイナリ値」に変換されてから、IEEE 754浮動小数点計算法による通常の最近似値丸め法(ゼロ値の符号保持を含む)に従ってdouble型に丸められます。 最近似値丸め法は、オーバーフローやアンダーフローの動作が発生することも意味します。sの正確な値の絶対値が十分大きい場合(MAX_VALUE+ulp(MAX_VALUE)/2以上の場合)、doubleに丸めると無限大になり、sの正確な値が十分小さい場合(MIN_VALUE/2以下の場合)、float に丸めるとゼロになることに注意してください。 最後に、丸めが完了したら、このdouble値を表すDoubleオブジェクトが返されます。末尾の形式指定子つまり浮動小数点リテラルの種類を決定する指定子(
1.0fはfloat値、1.0dはdouble値)は、このメソッドの結果に与えません。 つまり、入力文字列の数値は、ターゲットの浮動小数点型に直接変換されます。 文字列をfloatに変換し、floatをdoubleに変換する2ステップのシーケンスは、文字列をdoubleに変換するのと等価ではありません。 たとえば、floatリテラル0.1fはdouble値0.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 section 3.10.2 of // The Java Language Specification. // 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 }- APIのノート:
- 浮動小数点値のローカライズされた文字列表現、またはASCII以外の数字を持つ文字列表現を解釈するには、
NumberFormatを使用します。 たとえば、ここで、NumberFormat.getInstance(l).parse(s).doubleValue();lは目的のロケール、またはロケールが区別されない場合はLocale.ROOTです。このメソッドは、IEEE 754で定義されたconvertFromDecimalCharacterおよびconvertFromHexCharacter操作に対応します。 - パラメータ:
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値。 - スロー:
NullPointerException- 文字列がnullの場合NumberFormatException- 文字列が解析可能なdoubleを含まない場合- 導入されたバージョン:
- 1.2
- 関連項目:
-
isNaN
public static boolean isNaN(double v) 指定された数値が非数(NaN)である場合にはtrueを、そうでない場合はfalseを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisNaN演算に対応します。
- パラメータ:
v- 判定される値。- 戻り値:
- 引数の値がNaNである場合は
true、そうでない場合はfalse。
-
isInfinite
public static boolean isInfinite(double v) 指定された数値の絶対値が無限量である場合にはtrueを、そうでない場合にはfalseを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisInfinite演算に対応します。
- パラメータ:
v- 判定される値。- 戻り値:
- 引数が正または負の無限値の場合は
true、そうでない場合はfalse。
-
isFinite
public static boolean isFinite(double d) 引数が有限の浮動小数点値である場合はtrueを返し、そうでない場合(NaNおよび無限大の引数の場合)はfalseを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されているisFinite演算に対応します。
- パラメータ:
d- 判定されるdouble値- 戻り値:
- その引数が有限の浮動小数点値である場合は
true、それ以外の場合はfalse - 導入されたバージョン:
- 1.8
-
isNaN
public boolean isNaN()このDouble値が非数(NaN)である場合にはtrueを、そうでない場合はfalseを返します。- 戻り値:
- このオブジェクトが表す値がNaNである場合は
true、そうでない場合はfalse。
-
isInfinite
public boolean isInfinite()このDouble値の絶対値が無限量である場合にはtrueを、そうでない場合にはfalseを返します。- 戻り値:
- このオブジェクトが表す値が正の無限大または負の無限大である場合は
true、そうでない場合はfalse。
-
toString
-
byteValue
public byte byteValue()このDoubleの縮小プリミティブ変換後の値をbyteとして返します。- オーバーライド:
byteValue、クラスNumber- 戻り値:
- このオブジェクトが表す
double値をbyte型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.1
-
shortValue
public short shortValue()このDoubleの縮小プリミティブ変換後の値をshortとして返します。- オーバーライド:
shortValue、クラスNumber- 戻り値:
- このオブジェクトが表す
double値をshort型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.1
-
intValue
public int intValue()このDoubleの縮小プリミティブ変換後の値をintとして返します。- 定義:
intValue、クラスNumber- APIのノート:
- このメソッドは、IEEE 754で定義されたconvertToIntegerTowardZero操作に対応します。
- 戻り値:
- このオブジェクトが表す
double値をint型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
-
longValue
public long longValue()このDoubleの縮小プリミティブ変換後の値をlongとして返します。- 定義:
longValue、クラスNumber- APIのノート:
- このメソッドは、IEEE 754で定義されたconvertToIntegerTowardZero操作に対応します。
- 戻り値:
- このオブジェクトが表す
double値をlong型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
-
floatValue
public float floatValue()このDoubleの縮小プリミティブ変換後の値をfloatとして返します。- 定義:
floatValue、クラスNumber- APIのノート:
- このメソッドは、IEEE 754で定義されているconvertFormat演算に対応します。
- 戻り値:
- このオブジェクトが表す
double値をfloat型に変換したもの - Java言語仕様を参照してください:
-
5.1.3 プリミティブ・コンバージョンの解説
- 導入されたバージョン:
- 1.0
-
doubleValue
public double doubleValue()このDoubleオブジェクトのdouble値を返します。- 定義:
doubleValue、クラスNumber- 戻り値:
- このオブジェクトが表す
double値
-
hashCode
public int hashCode()このDoubleオブジェクトのハッシュ・コードを返します。 計算された結果は、doubleToLongBits(double)メソッドの結果とまったく同じように、このDoubleオブジェクトが表すプリミティブdouble値のlong整数をビット表現した上位32ビットと下位32ビットの排他的論理和になります。 すなわち、ハッシュ・コードは次の式の値です。
ただし、(int)(v^(v>>>32))vは次の式によって定義されます。long v = Double.doubleToLongBits(this.doubleValue()); -
hashCode
public static int hashCode(double value) Double.hashCode()との互換性がある、double値のハッシュ・コードを返します。- パラメータ:
value- ハッシュ対象の値- 戻り値:
double値のハッシュ・コード値。- 導入されたバージョン:
- 1.8
-
equals
public boolean equals(Object obj) このオブジェクトと指定されたオブジェクトを比較します。 結果がtrueになるのは、引数がnullでなく、このオブジェクトが表すdouble値と同じ値を保持するdoubleを表すDoubleオブジェクトである場合だけです。 このため、2つのdouble値が等しいと見なされるのは、doubleToLongBits(double)メソッドを各値に適用したときに同一のlong値が返される場合だけです。- オーバーライド:
equals、クラスObject- APIのノート:
==演算子は等価関係を定義せず、「等しい契約」を満たすために等価関係を実装する必要があるため、このメソッドは、double値の==演算子ではなく、doubleToLongBits(double)の観点から定義されます。「この説明では、浮動小数点の等価性と等価性について詳しく説明」を参照してください。- パラメータ:
obj- 比較対象の参照オブジェクト。- 戻り値:
- このオブジェクトがobj引数と同じである場合は
true、それ以外の場合はfalse。 - Java言語仕様を参照してください:
-
「15.21.1 数値等価演算子==と!=」
- 関連項目:
-
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精度の浮動小数点値。- 戻り値:
- 浮動小数点値を表すビット。
- 導入されたバージョン:
- 1.3
-
longBitsToDouble
public static double longBitsToDouble(long bits) 指定されたビット表現と対応するdouble値を返します。 引数は、IEEE 754浮動小数点「倍精度」ビット配列に従った浮動小数点表現と見なされます。引数が
0x7ff0000000000000Lの場合、結果は正の無限大値になります。引数が
0xfff0000000000000Lの場合、結果は負の無限大値になります。引数が
0x7ff0000000000001Lから0x7fffffffffffffffL、または0xfff0000000000001Lから0xffffffffffffffffLの範囲内の値である場合、結果はNaNになります。 Javaにより提供されるIEEE 754浮動小数点操作は、異なるビット・パターンを持つ同じ型の2つのNaN値を識別できません。 個別のNaN値を識別できるのは、Double.doubleToRawLongBitsメソッドを使用する場合だけです。そのほかの場合では、s、e、およびmの3つの値について次の引数から計算できるとします。
この場合、浮動小数点値の結果は、数式s·m·2e-1075の値と等しくなります。int s = ((bits >> 63) == 0) ? 1 : -1; int e = (int)((bits >> 52) & 0x7ffL); long m = (e == 0) ? (bits & 0xfffffffffffffL) << 1 : (bits & 0xfffffffffffffL) | 0x10000000000000L;このメソッドは、
long引数とまったく同じビット・パターンを持つdoubleNaNを返すことができない可能性があります。 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オブジェクトを数値的に比較します。 このメソッドでは、double値のJava言語数値比較演算子(<, <=, ==, >=, >)で定義された不完全な順序と比較して、2つの差異があるDoubleオブジェクトに合計順序が適用されます。- NaNは、他の値に関して「順序なし」で、比較演算子ではそれ自体に対して不等です。 このメソッドは、
Double.NaNをそれ自体に等しく、他のすべてのdouble値(Double.POSITIVE_INFINITYを含む)より大きく定義することを選択します。 - 正のゼロと負のゼロは、数値で比較されますが、区別できる値は明確です。 このメソッドでは、正のゼロ((
+0.0d))を負のゼロ((-0.0d))より大きい値として定義します。
Doubleオブジェクトの「自然順序付け」が「次と等しい一致」であることが保証されます。「浮動小数点比較と順序付けの詳細は、この説明を参照してください」を参照してください。- 定義:
compareTo、インタフェースComparable<Double>- パラメータ:
anotherDouble- 比較対象のDouble。- 戻り値:
anotherDoubleがこのDoubleと同じ数値の場合は値0。DoubleがanotherDoubleより小さい数値の場合は0より小さい値。DoubleがanotherDoubleより大きい数値の場合は0より大きい値。- Java言語仕様を参照してください:
-
「15.20.1 数値比較演算子
<、<=、>および>=」 - 導入されたバージョン:
- 1.2
- NaNは、他の値に関して「順序なし」で、比較演算子ではそれ自体に対して不等です。 このメソッドは、
-
compare
public static int compare(double d1, double d2) 指定された2つのdouble値を比較します。 返される整数値の符号は、次の呼出しで返される整数の符号と同じになります。Double.valueOf(d1).compareTo(Double.valueOf(d2))- パラメータ:
d1- 比較する最初のdoubled2- 比較する2番目のdouble- 戻り値:
d1がこのd2と同じ数値の場合は値0。d1がd2より小さい数値の場合は0より小さい値。d1がd2より大きい数値の場合は0より大きい値。- 導入されたバージョン:
- 1.4
-
sum
public static double sum(double a, double b) +演算子のように、2つのdouble値を加算します。- APIのノート:
- このメソッドは、IEEE 754で定義されている追加演算に対応します。
- パラメータ:
a- 第1オペランドb- 第2オペランド- 戻り値:
aとbの合計- Java言語仕様を参照してください:
-
4.2.4 浮動小数点操作
- 導入されたバージョン:
- 1.8
- 関連項目:
-
max
public static double max(double a, double b) Math.maxを呼び出した場合と同様に、2つのdouble値の大きいほうを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されている最大演算数に対応します。
- パラメータ:
a- 第1オペランドb- 第2オペランド- 戻り値:
aとbのどちらか大きい方- 導入されたバージョン:
- 1.8
- 関連項目:
-
min
public static double min(double a, double b) Math.minを呼び出した場合と同様に、2つのdouble値の小さいほうを返します。- APIのノート:
- このメソッドは、IEEE 754で定義されている最小動作に対応します。
- パラメータ:
a- 第1オペランドb- 第2オペランド- 戻り値:
aとbのどちらか小さい方。- 導入されたバージョン:
- 1.8
- 関連項目:
-
describeConstable
-
resolveConstantDesc
public Double resolveConstantDesc(MethodHandles.Lookup lookup) このインスタンスをConstantDescとして解決します。その結果がインスタンス自体です。- 定義:
- インタフェース
ConstantDesc内のresolveConstantDesc - パラメータ:
lookup- 無視されます- 戻り値:
- Doubleインスタンス
- 導入されたバージョン:
- 12
-