JavaTM Platform
Standard Ed. 6

java.math
クラス BigDecimal

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

public class BigDecimal
extends Number
implements Comparable<BigDecimal>

変更が不可能な、任意精度の符号付き小数です。BigDecimal は、任意精度の「スケールなしの整数値」と、32 ビット整数の「スケール」で構成されます。0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする 10 の累乗を乗算します。つまり、BigDecimal で表される数値は (unscaledValue × 10-scale) です。

BigDecimal クラスは、算術、スケール操作、丸め、比較、ハッシング、および書式変換の演算を提供します。toString() メソッドは BigDecimal の正規表現を提供します。

BigDecimal クラスは、ユーザーが丸め動作を完全に制御できるようにします。丸めモードが指定されず、正確な結果が表現できない場合、例外がスローされます。 そうでない場合、演算に適切な MathContext オブジェクトを指定することで、選択された精度と丸めモードで計算が実行されます。どちらの場合も、丸めの制御に 8 つの「丸めモード」が提供されます。このクラスの整数フィールド (ROUND_HALF_UP など) を使用して丸めモードを表すことはほとんど行われません。 RoundingMode enum (RoundingMode.HALF_UP など) の列挙値を使用してください。

MathContext オブジェクトに精度設定 0 (例: MathContext.UNLIMITED) が指定されている場合、その算術メソッドは MathContext オブジェクトを使用しないため、算術演算は正確です。これは、リリース 5 より前でサポートされていた唯一の動作です。結果の計算が正確であるため、精度 0 の設定を持つ MathContext の丸めモード設定は使用されず、無関係です。除算の場合、正確な商は小数点以下が無限の長さを持つ可能性があります (例: 1 ÷ 3)。 商の小数点以下が無限で、演算が正確な結果を返すように指定されている場合、ArithmeticException がスローされます。そうでない場合、ほかの演算と同様に、除算の正確な結果が返されます。

精度設定が 0 でない場合、BigDecimal の算術規則は、ANSI X3.274-1996 および ANSI X3.274-1996/AM 1-2000 (セクション 7.4) で定義されている、選択された演算モードと広範な互換性があります。これらの規格とは異なり、BigDecimal には、リリース 5 より前の BigDecimal の除算で必須だった多くの丸めモードがあります。 これらの ANSI 規格と BigDecimal 仕様の競合は、BigDecimal を優先する方法で解決されます。

同じ数値でも表現が異なる (スケールが異なる) 可能性があるため、算術および丸めの規則は、数値的な結果と、結果の表現に使用するスケールの両方を指定する必要があります。

一般に、正確な結果に返される桁数よりも多く (除算の場合は無限大も) の桁がある場合、丸めモードと精度設定により、演算が返す結果の桁数が決まります。 まず、返される桁の合計数は MathContextprecision 設定で指定されます。 これにより、結果の「精度」が決定されます。桁数のカウントは、正確な結果のもっとも左の 0 でない桁から始まります。丸めモードでは、破棄される桁が返される結果にどのように影響するかが決定されます。

すべての算術演算子では、演算は、まず正確な中間結果を計算し、次に選択された丸めモードを使用して (必要な場合は) 精度設定で指定された桁数に丸めるという手順で実行されます。正確な結果が返されない場合、正確な結果のいくつかの桁位置が破棄されます。丸めにより、返される結果の絶対値が増える場合、先頭の「9」の桁に対して桁の繰り上げを実行することで新しい桁位置を作成できます。たとえば、999.9 という値を切り上げて 3 桁に丸めると、1000 と等しくなり、これは 100×101 として表現されます。このような場合、新たに「1」が返される結果の先頭の桁位置になります。

論理的に正確な結果のほか、各算術演算には結果を表現するために優先されるスケールがあります。各演算の優先スケールを、次の表に示します。

算術演算の結果で優先されるスケール

演算優先される結果のスケール
加算max(addend.scale(), augend.scale())
減算max(minuend.scale(), subtrahend.scale())
乗算multiplier.scale() + multiplicand.scale()
除算dividend.scale() - divisor.scale()
これらのスケールは、正確な算術結果を返すメソッドによってだけ使用されます。 ただし、正確な除算では、正確な結果の桁数が多い可能性があるため、より大きなスケールを使用する必要がある場合があります。たとえば、1/320.03125 です。

丸めの前は、論理的に正確な中間結果のスケールがその演算の優先スケールです。正確な数値結果を precision 桁で表現できない場合、丸めにより返す桁セットが選択され、その結果のスケールは中間結果のスケールから、実際に返される precision 桁を表すことのできる最小のスケールに縮小されます。正確な結果が precision 桁で表現できる場合、その結果の表現は優先スケールにもっとも近いスケールで返されます。特に、正確に表現可能な商は、後続の 0 と削除し、スケールを小さくすることで、precision 桁よりも少ない桁で表現できます。たとえば、floor 丸めモードを使用した 3 桁への丸めでは、次のようになります。
19/100 = 0.19 // integer=19, scale=2
ただし、次も成り立ちます。
21/110 = 0.190 // integer=190, scale=3

加算、減算、および乗算では、スケールの縮小は、正確な結果の破棄される桁位置の数と等しくなる点に注意してください。丸めによる桁の繰り上げで新しい上位の桁位置が作成される場合、新しい桁位置が作成されないと、結果の追加された桁は破棄されます。

ほかのメソッドは、少し異なる丸めセマンティクスを持つ可能性があります。たとえば、指定されたアルゴリズムを使用する pow メソッドの結果は、丸められた数学的結果と 1 ulp 以上異なる場合があります。

BigDecimal のスケール操作には、スケーリング/丸め演算と小数点移動演算の 2 種類があります。スケーリング/丸め演算 (setScaleround) は、値がオペランドの値とほぼ (またはちょうど) 等しいがスケールまたは精度は指定された値である BigDecimal を返します。 この演算では、値に対して最小限の影響で、格納される数値の精度が上下します。小数点移動演算 (movePointLeftmovePointRight) は、指定した方向に指定した桁だけ小数点を移動することによりオペランドから作成される BigDecimal を返します。

説明をわかりやすく簡潔にするために、BigDecimal メソッドの説明では全体を通して擬似コードを使用します。擬似コード式 (i + j) は、「値が BigDecimal i の値と BigDecimal j の値の和である BigDecimal」を示します。擬似コード式 (i == j) は、「BigDecimal iBigDecimal j と同じ値を表す場合にだけ true であること」を示します。ほかの擬似コード式も同じように解釈されます。角括弧は、BigDecimal 値を定義する特別な BigInteger とスケールのペアを表すために使用されます。 たとえば、[19, 2] は、スケール 2 を持つ 0.19 と数値的に等しい BigDecimal です。

注:BigDecimal オブジェクトを SortedMap のキーまたは SortedSet の要素として使用する場合は、注意してください。 BigDecimal の「自然順序付け」が「equals と矛盾する」からです。詳細は、ComparableSortedMap、または SortedSet を参照してください。

このクラスのメソッドおよびコンストラクタはすべて、入力パラメータに対して null オブジェクト参照が渡されると NullPointerException をスローします。

関連項目:
BigInteger, MathContext, RoundingMode, SortedMap, SortedSet, 直列化された形式

フィールドの概要
static BigDecimal ONE
          スケール 0 の 値 1 です。
static int ROUND_CEILING
          正の無限大に近づくように丸めるモードです。
static int ROUND_DOWN
          0 に近づくように丸めるモードです。
static int ROUND_FLOOR
          負の無限大に近づくように丸めるモードです。
static int ROUND_HALF_DOWN
          「もっとも近い数字」に丸めるモードです。
static int ROUND_HALF_EVEN
          「もっとも近い数字」 に丸める丸めモードです。
static int ROUND_HALF_UP
          「もっとも近い数字」に丸めるモードです。
static int ROUND_UNNECESSARY
          要求される演算の結果が正確であり、丸めが必要でないことを表す丸めモードです。
static int ROUND_UP
          0 から離れるように丸めるモードです。
static BigDecimal TEN
          スケール 0 の 値 10 です。
static BigDecimal ZERO
          スケール 0 の 値 0 です。
 
コンストラクタの概要
BigDecimal(BigInteger val)
          BigIntegerBigDecimal に変換します。
BigDecimal(BigInteger unscaledVal, int scale)
          BigInteger のスケールなしの値と int のスケールを BigDecimal に変換します。
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
          コンテキスト設定に従った丸めを使用して、BigInteger のスケールなしの値と int のスケールを BigDecimal に変換します。
BigDecimal(BigInteger val, MathContext mc)
          コンテキスト設定に従った丸めを使用して、BigIntegerBigDecimal に変換します。
BigDecimal(char[] in)
          BigDecimal の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。
BigDecimal(char[] in, int offset, int len)
          BigDecimal の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取り、部分配列の指定を可能にします。
BigDecimal(char[] in, int offset, int len, MathContext mc)
          部分配列の指定を可能にし、コンテキスト設定に従った丸めを使用しつつ、BigDecimal の文字配列表現を BigDecimal に変換して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。
BigDecimal(char[] in, MathContext mc)
          BigDecimal の文字配列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。
BigDecimal(double val)
          doubledouble のバイナリ浮動小数点値の正確な 10 進数表現である BigDecimal に変換します。
BigDecimal(double val, MathContext mc)
          コンテキスト設定に従った丸めを使用して、doubleBigDecimal に変換します。
BigDecimal(int val)
          intBigDecimal に変換します。
BigDecimal(int val, MathContext mc)
          コンテキスト設定に従った丸めを使用して、intBigDecimal に変換します。
BigDecimal(long val)
          longBigDecimal に変換します。
BigDecimal(long val, MathContext mc)
          コンテキスト設定に従った丸めを使用して、longBigDecimal に変換します。
BigDecimal(String val)
          BigDecimalの文字列表現を BigDecimal に変換します。
BigDecimal(String val, MathContext mc)
          BigDecimal の文字列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字列を BigDecimal(String) コンストラクタとして受け取ります。
 
メソッドの概要
 BigDecimal abs()
          値がこの BigDecimal の絶対値でスケールが this.scale()BigDecimalを返します。
 BigDecimal abs(MathContext mc)
          コンテキスト設定に従った丸めを使用して、値がこの BigDecimal の絶対値である BigDecimal を返します。
 BigDecimal add(BigDecimal augend)
          値が (this + augend) でスケールが max(this.scale(), augend.scale())BigDecimal を返します。
 BigDecimal add(BigDecimal augend, MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (this + augend) である BigDecimal を返します。
 byte byteValueExact()
          この BigDecimalbyte に変換し、失われた情報がないかどうかを確認します。
 int compareTo(BigDecimal val)
          この BigDecimal と指定された BigDecimalを比較します。
 BigDecimal divide(BigDecimal divisor)
          値が (this / divisor) で優先スケールが (this.scale() - divisor.scale()) である BigDecimal を返します。
 BigDecimal divide(BigDecimal divisor, int roundingMode)
          値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。
 BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
          値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。
 BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
          値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。
 BigDecimal divide(BigDecimal divisor, MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (this / divisor) である BigDecimal を返します。
 BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
          値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。
 BigDecimal[] divideAndRemainder(BigDecimal divisor)
          divideToIntegralValue の結果とそれに続く 2 つの オペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。
 BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
          コンテキスト設定に従った丸めを使用して計算された divideToIntegralValue の結果と、2 つの オペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。
 BigDecimal divideToIntegralValue(BigDecimal divisor)
          値が丸められた商 (this / divisor) の整数部である BigDecimal を返します。
 BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
          値が (this / divisor) の整数部である BigDecimal を返します。
 double doubleValue()
          この BigDecimaldouble に変換します。
 boolean equals(Object x)
          この BigDecimal と指定された Object が等しいかどうかを比較します。
 float floatValue()
          この BigDecimalfloat に変換します。
 int hashCode()
          この BigDecimal のハッシュコードを返します。
 int intValue()
          この BigDecimalint に変換します。
 int intValueExact()
          この BigDecimalint に変換し、失われた情報がないかどうかを確認します。
 long longValue()
          この BigDecimallong に変換します。
 long longValueExact()
          この BigDecimallong に変換し、失われた情報がないかどうかを確認します。
 BigDecimal max(BigDecimal val)
          この BigDecimalval の最大値を返します。
 BigDecimal min(BigDecimal val)
          この BigDecimalval の最小値を返します。
 BigDecimal movePointLeft(int n)
          小数点を n 桁左へ移動してこれに等しい BigDecimal を返します。
 BigDecimal movePointRight(int n)
          小数点を n 桁右へ移動してこれに等しい BigDecimal を返します。
 BigDecimal multiply(BigDecimal multiplicand)
          値が (this × multiplicand) でスケールが (this.scale() + multiplicand.scale())BigDecimal を返します。
 BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (this × multiplicand) である BigDecimal を返します。
 BigDecimal negate()
          値が (-this) でスケールが this.scale() である BigDecimal を返します。
 BigDecimal negate(MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (-this) である BigDecimal を返します。
 BigDecimal plus()
          値が (+this) でスケールが this.scale() である BigDecimal を返します。
 BigDecimal plus(MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (+this) である BigDecimal を返します。
 BigDecimal pow(int n)
          値が (thisn) である BigDecimal を返します。
 BigDecimal pow(int n, MathContext mc)
          値が (thisn)BigDecimal を返します。
 int precision()
          この BigDecimal の「精度」を返します。
 BigDecimal remainder(BigDecimal divisor)
          値が (this % divisor)BigDecimal を返します。
 BigDecimal remainder(BigDecimal divisor, MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (this % divisor) である BigDecimal を返します。
 BigDecimal round(MathContext mc)
          MathContext 設定に従って丸められた BigDecimal を返します。
 int scale()
          この BigDecimal の「スケール」を返します。
 BigDecimal scaleByPowerOfTen(int n)
          数値が (this * 10n) に等しい BigDecimal を返します。
 BigDecimal setScale(int newScale)
          スケールが指定された値であり、値がこの BigDecimal と同じ数値である、BigDecimalを返します。
 BigDecimal setScale(int newScale, int roundingMode)
          スケールが指定された値であり、かつスケールなしの値が、この BigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される BigDecimal を返します。
 BigDecimal setScale(int newScale, RoundingMode roundingMode)
          スケールが指定された値であり、かつスケールなしの値が、この BigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される BigDecimal を返します。
 short shortValueExact()
          この BigDecimalshort に変換し、失われた情報がないかどうかを確認します。
 int signum()
          この BigDecimal の符号値を返します。
 BigDecimal stripTrailingZeros()
          数値はこれに等しいが、後続の 0 が表現から削除された BigDecimal を返します。
 BigDecimal subtract(BigDecimal subtrahend)
          値が (this - subtrahend) でスケールが max(this.scale(), subtrahend.scale())BigDecimal を返します。
 BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
          コンテキスト設定に従った丸めを使用して、値が (this - subtrahend) である BigDecimal を返します。
 BigInteger toBigInteger()
          この BigDecimalBigInteger に変換します。
 BigInteger toBigIntegerExact()
          この BigDecimalBigInteger に変換し、失われた情報がないかどうかを確認します。
 String toEngineeringString()
          指数が必要な場合、技術表記法で、この BigDecimal の文字列表現を返します。
 String toPlainString()
          指数フィールドなしで、この BigDecimal の文字列表現を返します。
 String toString()
          指数が必要な場合、科学表記法で、この BigDecimal の文字列表現を返します。
 BigDecimal ulp()
          この BigDecimal の ulp (最終桁単位) のサイズを返します。
 BigInteger unscaledValue()
          値がこの BigDecimal の「スケールなしの値」である BigInteger を返します ((this * 10this.scale()) を計算する)。
static BigDecimal valueOf(double val)
          Double.toString(double) メソッドで提供されるdouble の標準的な文字列表現を使用して、doubleBigDecimal に変換します。
static BigDecimal valueOf(long val)
          long 値をスケールが 0 の BigDecimal に変換します。
static BigDecimal valueOf(long unscaledVal, int scale)
          long のスケールなしの値と int のスケールを BigDecimal に変換します。
 
クラス java.lang.Number から継承されたメソッド
byteValue, shortValue
 
クラス java.lang.Object から継承されたメソッド
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

フィールドの詳細

ZERO

public static final BigDecimal ZERO
スケール 0 の 値 0 です。

導入されたバージョン:
1.5

ONE

public static final BigDecimal ONE
スケール 0 の 値 1 です。

導入されたバージョン:
1.5

TEN

public static final BigDecimal TEN
スケール 0 の 値 10 です。

導入されたバージョン:
1.5

ROUND_UP

public static final int ROUND_UP
0 から離れるように丸めるモードです。破棄される 0 以外の小数部に先行する桁を常に増やします。この丸めモードは、計算された値の絶対値を減らしません。

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

ROUND_DOWN

public static final int ROUND_DOWN
0 に近づくように丸めるモードです。破棄される小数部に先行する桁を増分しません (つまり切り捨て)。この丸めモードは、計算された値の絶対値を増やしません。

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

ROUND_CEILING

public static final int ROUND_CEILING
正の無限大に近づくように丸めるモードです。BigDecimal が正の場合は ROUND_UP のように動作し、負の場合は ROUND_DOWN のように動作します。この丸めモードは、計算された値を減らしません。

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

ROUND_FLOOR

public static final int ROUND_FLOOR
負の無限大に近づくように丸めるモードです。BigDecimal が正の場合は ROUND_DOWN のように動作し、負の場合は ROUND_UP のように動作します。この丸めモードは、計算された値を増やしません。

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

ROUND_HALF_UP

public static final int ROUND_HALF_UP
「もっとも近い数字」に丸めるモードです。ただし、両隣りの数字が等距離の場合は切り上げます。破棄される小数部が 0.5 以上の場合は ROUND_UP のように動作し、それ以外の場合は ROUND_DOWN のように動作します。これは我々の大半が小学校で習った丸めモードのことです。

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

ROUND_HALF_DOWN

public static final int ROUND_HALF_DOWN
「もっとも近い数字」に丸めるモードです。ただし、両隣りの数字が等距離の場合は切り捨てます。破棄される小数部が 0.5 を超える場合は ROUND_UP のように動作し、それ以外の場合は ROUND_DOWN のように動作します。

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

ROUND_HALF_EVEN

public static final int ROUND_HALF_EVEN
「もっとも近い数字」 に丸める丸めモードです。ただし、両隣りの数字が等距離の場合は偶数側に丸めます。破棄する小数部の左辺の桁が奇数の場合は ROUND_HALF_UP のように動作し、偶数の場合は ROUND_HALF_DOWN のように動作します。この丸めモードは、連続する計算で繰り返し適用される場合に累積エラーを最小限にします。

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

ROUND_UNNECESSARY

public static final int ROUND_UNNECESSARY
要求される演算の結果が正確であり、丸めが必要でないことを表す丸めモードです。この丸めモードが結果が正確でない演算で指定される場合は、ArithmeticException がスローされます。

関連項目:
定数フィールド値
コンストラクタの詳細

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len)
BigDecimal の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取り、部分配列の指定を可能にします。

文字シーケンスが文字配列内ですでに使用可能な場合、char 配列を文字列に変換し、BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。

パラメータ:
in - 文字のソースである char 配列
offset - 調べる配列の最初の文字
len - 検討する文字数
例外:
NumberFormatException - inBigDecimal の有効な表現でない場合、または定義された部分配列が 完全に in 内にない場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(char[] in,
                  int offset,
                  int len,
                  MathContext mc)
部分配列の指定を可能にし、コンテキスト設定に従った丸めを使用しつつ、BigDecimal の文字配列表現を BigDecimal に変換して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。

文字シーケンスが文字配列内ですでに使用可能な場合、char 配列を文字列に変換し、BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。

パラメータ:
in - 文字のソースである char 配列
offset - 調べる配列の最初の文字
len - 検討する文字数
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
NumberFormatException - inBigDecimal の有効な表現でない場合、または定義された部分配列が 完全に in 内にない場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(char[] in)
BigDecimal の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。

文字シーケンスが文字配列としてすでに使用可能な場合、char 配列を文字列に変換して BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。

パラメータ:
in - 文字のソースである char 配列
例外:
NumberFormatException - inBigDecimal の有効な文字列表現でない場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(char[] in,
                  MathContext mc)
BigDecimal の文字配列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。

文字シーケンスが文字配列としてすでに使用可能な場合、char 配列を文字列に変換して BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。

パラメータ:
in - 文字のソースである char 配列
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
NumberFormatException - inBigDecimal の有効な文字列表現でない場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(String val)
BigDecimalの文字列表現を BigDecimal に変換します。文字列表現は、任意の符号「+」(「\u002B」) または「-」(「\u002D」) と、それに続く 0 桁以上の 10 進数字 (「整数部」) の列で構成され、任意で小数部または指数が付随します。

小数部は、小数点と 0 桁以上の 10 進数字で構成されます。この文字列では、整数部または小数部が少なくとも 1 桁は必要です。符号、整数部、小数部からなる数字は「有効数字」と呼ばれます。

指数は、「e」(「\u0065」) または「E」(「\u0045」) という文字に、1 つ以上の 10 進数字が続くかたちで構成されます。指数値は -Integer.MAX_VALUE (Integer.MIN_VALUE+1) から Integer.MAX_VALUE の範囲の値でなければなりません。

つまり、このコンストラクタが受け入れる文字列は次の文法によって記述されます。

BigDecimalString:
Signopt Significand Exponentopt

Sign:
+
-

Significand:
IntegerPart .FractionPartopt
. FractionPart
IntegerPart

IntegerPart:
Digits

FractionPart:
Digits

Exponent:
ExponentIndicator SignedInteger

ExponentIndicator:
e
E

SignedInteger:
Signopt Digits

Digits:
数字
Digits Digit

Digit:
Character.isDigit(char)true を返す任意の文字 (0、1、2 など)

返される BigDecimal のスケールは、小数部の桁数または 0 (文字列に小数部がない場合) となり、指数を調整します。 文字列に指数がある場合、スケールから指数が減算されます。結果のスケール値は、Integer.MIN_VALUE から Integer.MAX_VALUE の範囲の値でなければなりません。

文字から数字へのマッピングは Character.digit(char, int) で提供され、基数 10 への変換に設定されます。 String には、不適切な文字 (空白など) を含めることはできません。

例:
返される BigDecimal の値は、「有効数字」× 10 exponent と等しくなります。左側に各文字列、右側に結果の表現 [BigInteger, scale] が示されます。

 "0"            [0,0]
 "0.00"         [0,2]
 "123"          [123,0]
 "-123"         [-123,0]
 "1.23E3"       [123,-1]
 "1.23E+3"      [123,-1]
 "12.3E+7"      [123,-6]
 "12.0"         [120,1]
 "12.3"         [123,1]
 "0.00123"      [123,5]
 "-1.23E-12"    [-123,14]
 "1234.5E-4"    [12345,5]
 "0E+7"         [0,-7]
 "-0"           [0,0]
 

注:float および double の NaN、および ±Infinity 以外の値では、このコンストラクタは Float.toString(float) および Double.toString(double)で返される値と互換性があります。この方法では、BigDecimal(double) コンストラクタで予測ができないことによる影響を受けないため、float または double を BigDecimal に変換する望ましい方法です。

パラメータ:
val - BigDecimal の文字列表現
例外:
NumberFormatException - valBigDecimal の有効な文字列表現でない場合

BigDecimal

public BigDecimal(String val,
                  MathContext mc)
BigDecimal の文字列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字列を BigDecimal(String) コンストラクタとして受け取ります。

パラメータ:
val - BigDecimal の文字列表現
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
NumberFormatException - val が BigDecimal の有効な文字列表現でない場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(double val)
doubledouble のバイナリ浮動小数点値の正確な 10 進数表現である BigDecimal に変換します。返された BigDecimal のスケールは、(10scale × val) が整数となるような最小値です。

注:

  1. このコンストラクタの結果は予想外である可能性がある。Java で new BigDecimal(0.1) と記述すると、0.1 と正確に等しい BigDecimal (スケール 1 の、スケールなしの値 1) が作成されると考えるかもしれないが、実際には 0.1000000000000000055511151231257827021181583404541015625 と等しくなる。これは、0.1 を double (またはどんな有限長 2 進小数でも) として正確に表現できないためである。したがって、コンストラクタに渡される値は正確に 0.1 と等しいわけではない
  2. 一方、String コンストラクタは完全に予測可能である。new BigDecimal("0.1") と記述すると、「正確に」 0.1 と等しい BigDecimal が作成される。そのため、通常は、これの代わりに String コンストラクタを使用することが推奨されている
  3. BigDecimal のソースとして double を使用する必要がある場合、このコンストラクタは正確な変換を行うことに注意する必要がある。 このコンストラクタでは、Double.toString(double) メソッドと BigDecimal(String) コンストラクタを使用して doubleString に変換したときと同じ結果にはならない。同じ結果を得るには、static valueOf(double) メソッドを使用する

パラメータ:
val - BigDecimal に変換する double
例外:
NumberFormatException - val が 無限か NaN である場合

BigDecimal

public BigDecimal(double val,
                  MathContext mc)
コンテキスト設定に従った丸めを使用して、doubleBigDecimal に変換します。BigDecimal のスケールは、(10scale × val) が整数であるような最小値です。

このコンストラクタの結果は予想外である可能性があるため、一般的に使用はお勧めしません。 BigDecimal(double) コンストラクタの注を参照してください。

パラメータ:
val - BigDecimal に変換する double
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 RoundingMode が UNNECESSARY の場合
NumberFormatException - val が 無限か NaN である場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(BigInteger val)
BigIntegerBigDecimal に変換します。BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する BigInteger

BigDecimal

public BigDecimal(BigInteger val,
                  MathContext mc)
コンテキスト設定に従った丸めを使用して、BigIntegerBigDecimal に変換します。BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する BigInteger
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale)
BigInteger のスケールなしの値と int のスケールを BigDecimal に変換します。BigDecimalの値は (unscaledVal × 10-scale) です。

パラメータ:
unscaledVal - BigDecimal のスケールなしの値
scale - BigDecimal のスケール

BigDecimal

public BigDecimal(BigInteger unscaledVal,
                  int scale,
                  MathContext mc)
コンテキスト設定に従った丸めを使用して、BigInteger のスケールなしの値と int のスケールを BigDecimal に変換します。BigDecimalの値は (unscaledVal × 10-scale) であり、precision と丸めモード設定に従って丸められます。

パラメータ:
unscaledVal - BigDecimal のスケールなしの値
scale - BigDecimal のスケール
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(int val)
intBigDecimal に変換します。BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する int
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(int val,
                  MathContext mc)
コンテキスト設定に従った丸めを使用して、intBigDecimal に変換します。丸めを行う前の BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する int
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(long val)
longBigDecimal に変換します。BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する long
導入されたバージョン:
1.5

BigDecimal

public BigDecimal(long val,
                  MathContext mc)
コンテキスト設定に従った丸めを使用して、longBigDecimal に変換します。丸めを行う前の BigDecimal のスケールは 0 です。

パラメータ:
val - BigDecimal に変換する long
mc - 使用するコンテキスト
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5
メソッドの詳細

valueOf

public static BigDecimal valueOf(long unscaledVal,
                                 int scale)
long のスケールなしの値と int のスケールを BigDecimal に変換します。この「static ファクトリメソッド」は、よく使われる BigDecimal 値の再利用を可能にするため、(long, int) コンストラクタよりも優先して提供されます。

パラメータ:
unscaledVal - BigDecimal のスケールなしの値
scale - BigDecimal のスケール
戻り値:
値が(unscaledVal × 10-scale)BigDecimal

valueOf

public static BigDecimal valueOf(long val)
long 値をスケールが 0 の BigDecimal に変換します。この「static ファクトリメソッド」は、よく使われる BigDecimal の再利用を可能にするため、(long) コンストラクタよりも優先して提供されます。

パラメータ:
val - BigDecimal の値
戻り値:
値が valBigDecimal

valueOf

public static BigDecimal valueOf(double val)
Double.toString(double) メソッドで提供されるdouble の標準的な文字列表現を使用して、doubleBigDecimal に変換します。

注: これは、double (または float) を BigDecimal に変換するための推奨される方法です。 返される値は、Double.toString(double) を使用した場合の結果から BigDecimal を構築した結果と等しいためです。

パラメータ:
val - BigDecimal に変換する double
戻り値:
値が val と等しい、またはほぼ等しい BigDecimal
例外:
NumberFormatException - val が 無限か NaN である場合
導入されたバージョン:
1.5

add

public BigDecimal add(BigDecimal augend)
値が (this + augend) でスケールが max(this.scale(), augend.scale())BigDecimal を返します。

パラメータ:
augend - この BigDecimal に加算する値
戻り値:
this + augend

add

public BigDecimal add(BigDecimal augend,
                      MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this + augend) である BigDecimal を返します。 どちらかの数値が 0 で精度設定が 0 以外である場合、必要に応じて丸められたほかの数値が結果として使用されます。

パラメータ:
augend - この BigDecimal に加算する値
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this + augend
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

subtract

public BigDecimal subtract(BigDecimal subtrahend)
値が (this - subtrahend) でスケールが max(this.scale(), subtrahend.scale())BigDecimal を返します。

パラメータ:
subtrahend - この BigDecimal から減算する値
戻り値:
this - subtrahend

subtract

public BigDecimal subtract(BigDecimal subtrahend,
                           MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this - subtrahend) である BigDecimal を返します。 subtrahend が 0 である場合、必要に応じて丸められた this の値が結果として使用されます。this が 0 である場合、結果は subtrahend.negate(mc) です。

パラメータ:
subtrahend - この BigDecimal から減算する値
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this - subtrahend
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

multiply

public BigDecimal multiply(BigDecimal multiplicand)
値が (this × multiplicand) でスケールが (this.scale() + multiplicand.scale())BigDecimal を返します。

パラメータ:
multiplicand - この BigDecimal で乗算する値
戻り値:
this * multiplicand

multiply

public BigDecimal multiply(BigDecimal multiplicand,
                           MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this × multiplicand) である BigDecimal を返します。

パラメータ:
multiplicand - この BigDecimal で乗算する値
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this * multiplicand
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         int roundingMode)
値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。丸めを行い、指定したスケールで結果を生成する必要がある場合は、指定した丸めモードが適用されます。

このレガシーメソッドよりも、新しい divide(BigDecimal, int, RoundingMode) メソッドを使用してください。

パラメータ:
divisor - この BigDecimal を除算する値
scale - 返される BigDecimal の商のスケール
roundingMode - 適用する丸めモード
戻り値:
this / divisor
例外:
ArithmeticException - divisor が 0 で、 roundingMode==ROUND_UNNECESSARY であり、 指定したスケールが除算の結果を正確に表すには 十分でない場合
IllegalArgumentException - roundingMode が 有効な丸めモードを表さない場合
関連項目:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         int scale,
                         RoundingMode roundingMode)
値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。丸めを行い、指定したスケールで結果を生成する必要がある場合は、指定した丸めモードが適用されます。

パラメータ:
divisor - この BigDecimal を除算する値
scale - 返される BigDecimal の商のスケール
roundingMode - 適用する丸めモード
戻り値:
this / divisor
例外:
ArithmeticException - divisor が 0 で、 roundingMode==RoundingMode.UNNECESSARY であり、 指定したスケールが除算の結果を正確に表すには 十分でない場合
導入されたバージョン:
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         int roundingMode)
値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。丸めを行い、特定のスケールで結果を生成する必要がある場合は、指定された丸めモードが適用されます。

このレガシーメソッドよりも、新しい divide(BigDecimal, RoundingMode) メソッドを使用してください。

パラメータ:
divisor - この BigDecimal を除算する値
roundingMode - 適用する丸めモード
戻り値:
this / divisor
例外:
ArithmeticException - divisor==0 である場合、または roundingMode==ROUND_UNNECESSARY であり、 this.scale() が除算の結果を正確に表すには 十分でない場合
IllegalArgumentException - roundingMode が 有効な丸めモードを表さない場合
関連項目:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

divide

public BigDecimal divide(BigDecimal divisor,
                         RoundingMode roundingMode)
値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。丸めを行い、特定のスケールで結果を生成する必要がある場合は、指定された丸めモードが適用されます。

パラメータ:
divisor - この BigDecimal を除算する値
roundingMode - 適用する丸めモード
戻り値:
this / divisor
例外:
ArithmeticException - divisor==0 である場合、または roundingMode==RoundingMode.UNNECESSARY であり、 this.scale() が除算の結果を正確に表すには 十分でない場合
導入されたバージョン:
1.5

divide

public BigDecimal divide(BigDecimal divisor)
値が (this / divisor) で優先スケールが (this.scale() - divisor.scale()) である BigDecimal を返します。 (小数点以下が無限となるため) 正確な商を表現できない場合、ArithmeticException がスローされます。

パラメータ:
divisor - この BigDecimal を除算する値
戻り値:
this / divisor
例外:
ArithmeticException - 正確な商の小数点以下が 無限である場合
導入されたバージョン:
1.5

divide

public BigDecimal divide(BigDecimal divisor,
                         MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this / divisor) である BigDecimal を返します。

パラメータ:
divisor - この BigDecimal を除算する値
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this / divisor
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY または mc.precision == 0 かつ商の小数点以下が 無限である場合
導入されたバージョン:
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor)
値が丸められた商 (this / divisor) の整数部である BigDecimal を返します。結果の優先スケールは、(this.scale() - divisor.scale()) です。

パラメータ:
divisor - この BigDecimal を除算する値
戻り値:
this / divisor の整数部
例外:
ArithmeticException - divisor==0 である場合
導入されたバージョン:
1.5

divideToIntegralValue

public BigDecimal divideToIntegralValue(BigDecimal divisor,
                                        MathContext mc)
値が (this / divisor) の整数部である BigDecimal を返します。正確な商の整数部は丸めモードに依存しないため、丸めモードはこのメソッドにより返される値に影響を及ぼしません。結果の優先スケールは、(this.scale() - divisor.scale()) です。正確な商の整数部に mc.precision よりも多くの桁が必要な場合、ArithmeticException がスローされます。

パラメータ:
divisor - この BigDecimal を除算する値
mc - 使用するコンテキスト
戻り値:
this / divisor の整数部
例外:
ArithmeticException - divisor==0 である場合
ArithmeticException - mc.precision が 0 より大きく、 結果に mc.precision よりも桁数の多い精度が必要な場合
導入されたバージョン:
1.5

remainder

public BigDecimal remainder(BigDecimal divisor)
値が (this % divisor)BigDecimal を返します。

剰余は this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) によって提供されます。これはモジュロ演算ではない (負の結果が可能) であることに留意してください。

パラメータ:
divisor - この BigDecimal を除算する値
戻り値:
this % divisor
例外:
ArithmeticException - divisor==0 である場合
導入されたバージョン:
1.5

remainder

public BigDecimal remainder(BigDecimal divisor,
                            MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this % divisor) である BigDecimal を返します。MathContext 設定は、剰余の計算に使用する暗黙的な除算に影響を及ぼします。定義の示すとおり、剰余の計算自体は正確です。そのため、剰余は mc.getPrecision() よりも多くの桁を含む可能性があります。

剰余は this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) によって提供されます。これはモジュロ演算ではない (負の結果が可能) であることに留意してください。

パラメータ:
divisor - この BigDecimal を除算する値
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this % divisor
例外:
ArithmeticException - divisor==0 である場合
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合、または mc.precision が 0 より大きく、this.divideToIntgralValue(divisor) の 結果に mc.precision よりも桁数の多い精度が必要な場合
導入されたバージョン:
1.5
関連項目:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor)
divideToIntegralValue の結果とそれに続く 2 つの オペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。

整数の商と剰余の両方が必要な場合、divideToIntegralValue メソッドと remainder メソッドを別々に使用するより、除算を 1 回だけ実行すればよいこのメソッドの方が高速であることに留意してください。

パラメータ:
divisor - この BigDecimal を除算する値、 および計算された剰余
戻り値:
2 要素の BigDecimal 配列。商 (divideToIntegralValue の結果) が最初の要素で、 剰余が最後の要素
例外:
ArithmeticException - divisor==0 である場合
導入されたバージョン:
1.5
関連項目:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

divideAndRemainder

public BigDecimal[] divideAndRemainder(BigDecimal divisor,
                                       MathContext mc)
コンテキスト設定に従った丸めを使用して計算された divideToIntegralValue の結果と、2 つの オペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。

整数の商と剰余の両方が必要な場合、divideToIntegralValue メソッドと remainder メソッドを別々に使用するより、除算を 1 回だけ実行すればよいこのメソッドの方が高速であることに留意してください。

パラメータ:
divisor - この BigDecimal を除算する値、 および計算された剰余
mc - 使用するコンテキスト
戻り値:
2 要素の BigDecimal 配列。商 (divideToIntegralValue の結果) が最初の要素で、 剰余が最後の要素
例外:
ArithmeticException - divisor==0 である場合
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合、または mc.precision が 0 より大きく、this.divideToIntgralValue(divisor) の 結果に mc.precision よりも桁数の多い精度が必要な場合
導入されたバージョン:
1.5
関連項目:
divideToIntegralValue(java.math.BigDecimal, java.math.MathContext), remainder(java.math.BigDecimal, java.math.MathContext)

pow

public BigDecimal pow(int n)
値が (thisn) である BigDecimal を返します。 累乗は、精度の制限なしで正確に計算されます。

パラメータ n は、0 から 999999999 の範囲に収まっている必要があります。ZERO.pow(0)ONE を返します。 将来のリリースでは、このメソッドの指数の許容範囲が拡張される可能性があります。

パラメータ:
n - この BigDecimal の累乗
戻り値:
this n
例外:
ArithmeticException - n が範囲外にある場合
導入されたバージョン:
1.5

pow

public BigDecimal pow(int n,
                      MathContext mc)
値が (thisn)BigDecimal を返します。現在の実装では、コンテキスト設定に従った丸めで ANSI 規格 X3.274-1996 で定義されたコアアルゴリズムを使用しています。一般的に、返された数値は、選択された精度の正確な数値の 2 ulp 以内です。将来のリリースでは、誤差の許容範囲を狭め、指数の許容範囲を拡大した別のアルゴリズムを使用する可能性があります。

X3.274-1996 アルゴリズムは、次のとおりです。

パラメータ:
n - この BigDecimal の累乗
mc - 使用するコンテキスト
戻り値:
ANSI standard X3.274-1996 アルゴリズムを使用した thisn
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合、または n が 範囲外である場合
導入されたバージョン:
1.5

abs

public BigDecimal abs()
値がこの BigDecimal の絶対値でスケールが this.scale()BigDecimalを返します。

戻り値:
abs(this)

abs

public BigDecimal abs(MathContext mc)
コンテキスト設定に従った丸めを使用して、値がこの BigDecimal の絶対値である BigDecimal を返します。

パラメータ:
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた abs(this)
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

negate

public BigDecimal negate()
値が (-this) でスケールが this.scale() である BigDecimal を返します。

戻り値:
-this

negate

public BigDecimal negate(MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (-this) である BigDecimal を返します。

パラメータ:
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた -this
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5

plus

public BigDecimal plus()
値が (+this) でスケールが this.scale() である BigDecimal を返します。

この BigDecimal を単に返すだけのこのメソッドは、単項マイナスメソッド negate() の対称として含まれています。

戻り値:
this
導入されたバージョン:
1.5
関連項目:
negate()

plus

public BigDecimal plus(MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (+this) である BigDecimal を返します。

このメソッドの効果は、round(MathContext) メソッドの効果と同じです。

パラメータ:
mc - 使用するコンテキスト
戻り値:
必要に応じて丸められた this。0 の結果の スケールは 0
例外:
ArithmeticException - 結果が正確でなく、 丸めモードが UNNECESSARY の場合
導入されたバージョン:
1.5
関連項目:
round(MathContext)

signum

public int signum()
この BigDecimal の符号値を返します。

戻り値:
この BigDecimal が負の場合は -1、 ゼロの場合は 0、正の場合は 1

scale

public int scale()
この BigDecimal の「スケール」を返します。0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする 10 の累乗を乗算します。たとえば、-3 のスケールでは、スケールなしの値に 1000 が乗算されます。

戻り値:
この BigDecimal のスケール

precision

public int precision()
この BigDecimal の「精度」を返します。精度とは、スケールなしの値の桁数のことです。

0 の精度は 1 です。

戻り値:
この BigDecimal の精度
導入されたバージョン:
1.5

unscaledValue

public BigInteger unscaledValue()
値がこの BigDecimal の「スケールなしの値」である BigInteger を返します ((this * 10this.scale()) を計算する)。

戻り値:
この BigDecimal のスケールなしの値
導入されたバージョン:
1.2

round

public BigDecimal round(MathContext mc)
MathContext 設定に従って丸められた BigDecimal を返します。精度設定が 0 の場合、丸めは実行されません。

このメソッドの結果は、plus(MathContext) メソッドの結果と同じです。

パラメータ:
mc - 使用するコンテキスト
戻り値:
MathContext 設定に従って丸められた BigDecimal
例外:
ArithmeticException - 丸めモードが UNNECESSARY で、 BigDecimal 演算に丸めが必要な場合
導入されたバージョン:
1.5
関連項目:
plus(MathContext)

setScale

public BigDecimal setScale(int newScale,
                           RoundingMode roundingMode)
スケールが指定された値であり、かつスケールなしの値が、この BigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される BigDecimal を返します。スケールが演算で減らされる場合、スケールなしの値は (乗算ではなく) 除算する必要があり、値が変わる可能性があります。 この場合、指定した丸めモードが除算に適用されます。

パラメータ:
newScale - 返される BigDecimal の値のスケール
roundingMode - 適用する丸めモード
戻り値:
スケールが指定された値であり、 かつスケールなしの値が、この BigDecimal のスケールなしの値と、 総体値を維持できる適当な 10 の累乗の 積または商により決定される BigDecimal
例外:
ArithmeticException - roundingMode==UNNECESSARY であり、 指定したスケール演算で丸めが 必要な場合
導入されたバージョン:
1.5
関連項目:
RoundingMode

setScale

public BigDecimal setScale(int newScale,
                           int roundingMode)
スケールが指定された値であり、かつスケールなしの値が、この BigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される BigDecimal を返します。スケールが演算で減らされる場合、スケールなしの値は (乗算ではなく) 除算する必要があり、値が変わる可能性があります。 この場合、指定した丸めモードが除算に適用されます。

BigDecimal オブジェクトは不変であるため、setX メソッドでフィールド X を変更する通常の規則とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールを持つオブジェクトを返します。 返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。

このレガシーメソッドよりも、新しい setScale(int, RoundingMode) メソッドを使用してください。

パラメータ:
newScale - 返される BigDecimal の値のスケール
roundingMode - 適用する丸めモード
戻り値:
スケールが指定された値であり、 かつスケールなしの値が、この BigDecimal のスケールなしの値と、 総体値を維持できる適当な 10 の累乗の 積または商により決定される BigDecimal
例外:
ArithmeticException - roundingMode==ROUND_UNNECESSARY であり、 指定したスケール演算で丸めが 必要な場合
IllegalArgumentException - roundingMode が 有効な丸めモードを表さない場合
関連項目:
ROUND_UP, ROUND_DOWN, ROUND_CEILING, ROUND_FLOOR, ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_UNNECESSARY

setScale

public BigDecimal setScale(int newScale)
スケールが指定された値であり、値がこの BigDecimal と同じ数値である、BigDecimalを返します。 これが不可能な場合、ArithmeticException をスローします。

通常、この呼び出しはスケールの拡張に使用され、その場合には指定されたスケールと正しい値の BigDecimal の存在が保証されます。値を変更することなく再スケーリングを行うのに十分な 0 が BigDecimalの小数部 (その整数値における 10 の因数) の最後にあることを呼び出し側が認識している場合、この呼び出しはスケールの縮小にも使用できます。

このメソッドは setScale の 2 つの引数を使うバージョンと同じ結果を返しますが、丸めを指定する必要のない場合に、呼び出し側は指定する手間を省くことができます。

BigDecimal オブジェクトは不変であるため、setX メソッドでフィールド X を変更する通常の規則とは対照的に、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールを持つオブジェクトを返します。 返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。

パラメータ:
newScale - 返される BigDecimal の値のスケール
戻り値:
スケールが指定された値であり、 かつスケールなしの値が、この BigDecimal のスケールなしの値と、 総体値を維持できる適当な 10 の累乗の 積または商により決定される BigDecimal
例外:
ArithmeticException - 指定したスケール演算で 丸めが必要な場合
関連項目:
setScale(int, int), setScale(int, RoundingMode)

movePointLeft

public BigDecimal movePointLeft(int n)
小数点を n 桁左へ移動してこれに等しい BigDecimal を返します。n が負でない場合は、スケールに n を単に加算します。n が負の場合は、movePointRight(-n) に等しくなります。この呼び出しで返される BigDecimalの値は (this × 10-n)、スケールは max(this.scale()+n, 0) です。

パラメータ:
n - 小数点を左へ移動する桁数
戻り値:
小数点を n 桁左へ移動した、 これに等しい BigDecimal
例外:
ArithmeticException - スケールがオーバーフローする場合

movePointRight

public BigDecimal movePointRight(int n)
小数点を n 桁右へ移動してこれに等しい BigDecimal を返します。n が負でない場合は、スケールから n を単に減算します。n が負の場合は、movePointLeft(-n) に等しくなります。この呼び出しで返される BigDecimalの値は (this × 10n)、スケールは max(this.scale()-n, 0) です。

パラメータ:
n - 小数点を右へ移動する桁数
戻り値:
小数点を n 桁右へ移動した、 これに等しい BigDecimal
例外:
ArithmeticException - スケールがオーバーフローする場合

scaleByPowerOfTen

public BigDecimal scaleByPowerOfTen(int n)
数値が (this * 10n) に等しい BigDecimal を返します。結果のスケールは (this.scale() - n) です。

例外:
ArithmeticException - スケールが 32 ビット整数の範囲外である場合
導入されたバージョン:
1.5

stripTrailingZeros

public BigDecimal stripTrailingZeros()
数値はこれに等しいが、後続の 0 が表現から削除された BigDecimal を返します。たとえば、[6000, 1] に等しい [BigInteger, scale] コンポーネントを持つ BigDecimal600.0 から後続の 0 を取り除くと、[6, -2] に等しい [BigInteger, scale] コンポーネントを持つ 6E2 になります。

戻り値:
後続の 0 が削除された、 数値の等しい BigDecimal
導入されたバージョン:
1.5

compareTo

public int compareTo(BigDecimal val)
この BigDecimal と指定された BigDecimalを比較します。このメソッドでは、値は等しいがスケールが異なる 2 つの BigDecimal オブジェクト (たとえば、2.0 と 2.00) が等しいと見なされます。このメソッドは、6 つの boolean 型の比較演算子 (<、==、>、>=、!=、<=) のそれぞれに対する個々のメソッドの代わりに提供されます。これらの比較を行うには (x.compareTo(y) <op> 0) という組み合わせをお勧めします。この場合、<op> には 6 つの演算子のうちの 1 つが入ります。

定義:
インタフェース Comparable<BigDecimal> 内の compareTo
パラメータ:
val - この BigDecimal と比較する BigDecimal
戻り値:
この BigDecimal の数値が val より小さい場合は -1、 等しい場合は 0、大きい場合は 1

equals

public boolean equals(Object x)
この BigDecimal と指定された Object が等しいかどうかを比較します。compareTo と違い、このメソッドは、2 つの BigDecimal オブジェクトが値もスケールも同じである場合にだけ等しいと見なします (したがって、このメソッドでは 2.0 と 2.00 は等しくない)。

オーバーライド:
クラス Object 内の equals
パラメータ:
x - この BigDecimal と比較する Object
戻り値:
指定した Object がこの BigDecimal と値もスケールも 等しい BigDecimal である場合にのみ true
関連項目:
compareTo(java.math.BigDecimal), hashCode()

min

public BigDecimal min(BigDecimal val)
この BigDecimalval の最小値を返します。

パラメータ:
val - 最小値の計算に使用する値
戻り値:
この BigDecimalval のうちで小さい方の値を持つ BigDecimalcompareTo メソッドで 定義されている比較方法で値が等しい場合は、 this が返される
関連項目:
compareTo(java.math.BigDecimal)

max

public BigDecimal max(BigDecimal val)
この BigDecimalval の最大値を返します。

パラメータ:
val - 最大値の計算に使用する値
戻り値:
この BigDecimalval のうちで大きい方の値を持つ BigDecimalcompareTo メソッドで 定義されている比較方法で値が等しい場合は、 this が返される
関連項目:
compareTo(java.math.BigDecimal)

hashCode

public int hashCode()
この BigDecimal のハッシュコードを返します。値が等しいがスケールが異なる 2 つの BigDecimal オブジェクト (たとえば、2.0 と 2.00) は、通常はハッシュコードが異なります。

オーバーライド:
クラス Object 内の hashCode
戻り値:
この BigDecimal のハッシュコード
関連項目:
equals(Object)

toString

public String toString()
指数が必要な場合、科学表記法で、この BigDecimal の文字列表現を返します。

BigDecimal の標準的な文字列形式は、次の手順で作成されます。まず、BigDecimal のスケールなしの値の絶対値が、「0」から「9」までの文字を使用した、先頭に 0 が付かない文字列 (基数10) に変換されます (ただし、値が 0 である場合は、単一の文字「0」が使用される)。

次に、「調整された指数」が計算されます。 これは、正負を逆にしたスケールに変換されたスケールなしの値の文字数を加算したものから 1 を減算したものです。つまり、-scale+(ulength-1) であり、ulength は 10 進数のスケールなしの値の絶対値の長さ (「精度」) です。

スケールが 0 以上で、調整された指数が -6 以上である場合、数値は指数表現なしの文字形式に変換されます。この場合、スケールが 0 のときは小数点は追加されません。 スケールが正のときは、小数点がスケールとともに挿入され、小数点以下の文字数が指定されます。必要に応じて、変換されたスケールなしの値の左に文字「0」が追加されます。この挿入のあとに小数点に先行する文字がない場合、慣例に従って文字「0」が先頭に付けられます。

その他の場合 (つまり、スケールが負、または調整された指数が -6 未満の場合)、数値は指数表現を使用して文字形式に変換されます。この場合、変換された BigInteger に複数の桁があるとき、最初の桁の後ろに小数点が挿入されます。次に、変換されたスケールなしの値の後ろに、(挿入された小数点とともに) 文字形式の指数が付けられます。 これは、文字「E」、およびその直後の調整された指数を文字形式に変換したもので構成されます。後者は基数 10 で、先頭に 0 が付かず、「0」〜「9」を使用し、調整された指数が負の場合は必ず先頭に符号文字「-」(「\u002D」)、そうでない場合は「+」(「\u002B」) が付いています。

最後に、スケールなしの値が 0 未満の場合は、文字列全体の先頭にマイナス符号文字「-」(「\u002D」) が付けられます。スケールなしの値が 0 または正の場合、符号文字は付けられません。

例:

各表現の左側は [unscaled value, scale]、右側は結果の文字列を示します。

 [123,0]      "123"
 [-123,0]     "-123"
 [123,-1]     "1.23E+3"
 [123,-3]     "1.23E+5"
 [123,1]      "12.3"
 [123,5]      "0.00123"
 [123,10]     "1.23E-8"
 [-123,12]    "-1.23E-10"
 
注:
  1. 区別可能な BigDecimal 値とこの変換の結果の間には、1 対 1 のマッピングがある。つまり、すべての区別可能な BigDecimal 値 (スケールなしの値とスケール) は、toString を使用した結果として、一意の文字列表現を持つ。BigDecimal(String) コンストラクタを使用してその文字列表現を BigDecimal に戻すと、元の値が復元される
  2. 特定の数値のために生成された文字列は常に同じであり、ロケールによる影響は受けない。つまり、10 進数データを交換するための標準的な文字列表現、つまりハッシュテーブルのキーなどとして使用することができる。 ロケールに依存する数値のフォーマットと解析は、NumberFormat クラスとそのサブクラスによって処理される
  3. 技術表記法での指数を使用した数値表現には toEngineeringString() メソッドを、BigDecimal の丸めには小数点以下の桁数が既知である setScale メソッドを、それぞれ使用できる
  4. Character.forDigit により提供される数字から文字へのマッピングが使用される

オーバーライド:
クラス Object 内の toString
戻り値:
この BigDecimal の文字列表現
関連項目:
Character.forDigit(int, int), BigDecimal(java.lang.String)

toEngineeringString

public String toEngineeringString()
指数が必要な場合、技術表記法で、この BigDecimal の文字列表現を返します。

toString() メソッドで記述されているように、BigDecimal を表す文字列を返します。 ただし、指数表現が使用される場合、0 でない値の整数部が 1 〜 999 の範囲に収まるように、10 の累乗は 3 の倍数 (技術表記法) に調整されます。 値 0 について指数表現が使用される場合、値 0 のスケールを維持するために小数点と 1 つまたは 2 つの小数部の桁が使用されます。toString() の出力と違い、このメソッドの出力では、文字列コンストラクタを使用して出力文字列を BigDecimal に戻したときに、BigDecimal の同じ [integer, scale] ペアの復元は保証されないことに注意してください。このメソッドの結果は、文字列コンストラクタをメソッドの出力に適用した結果と等価な数値を常に生成するという弱い制約を満たします。

戻り値:
指数が必要な場合、技術表記法による、 この BigDecimal の文字列表現
導入されたバージョン:
1.5

toPlainString

public String toPlainString()
指数フィールドなしで、この BigDecimal の文字列表現を返します。正のスケールを持つ値の場合、小数点以下の桁数は、スケールを示すために使用されます。スケールが 0 または負の値の場合、結果の文字列は、その値が スケール 0 を持つ数値的に等価な値に変換され、スケール 0 の値の後続の 0 すべてが結果に存在するかのように生成されます。 スケールなしの値が 0 未満の場合、文字列全体の先頭にマイナス符号文字「-」(「\u002D」) が付けられます。スケールなしの値が 0 または正の場合、符号文字は付けられません。 このメソッドの結果が文字列コンストラクタに渡される場合、この BigDecimal の数値だけが必ず復元されます。 新しい BigDecimal の表現は異なるスケールを持つ可能性があります。特に、この BigDecimal が負のスケールを持つ場合、このメソッドの結果の文字列は、文字列コンストラクタによって処理されるときにスケール 0 を持ちます。 (このメソッドの動作は、1.4 以前のリリースでの toString メソッドと同様)

戻り値:
この BigDecimal の、 指数フィールドのない文字列表現
導入されたバージョン:
1.5
関連項目:
toString(), toEngineeringString()

toBigInteger

public BigInteger toBigInteger()
この BigDecimalBigInteger に変換します。この変換は、『Java 言語仕様』で定義された double から long への 「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。

変換が正確でない (つまり、0 以外の小数部が破棄される) 場合に例外をスローするには、toBigIntegerExact() メソッドを使用してください。

戻り値:
BigInteger に変換されたこの BigDecimal

toBigIntegerExact

public BigInteger toBigIntegerExact()
この BigDecimalBigInteger に変換し、失われた情報がないかどうかを確認します。この BigDecimal に 0 以外の小数部がある場合、例外がスローされます。

戻り値:
BigInteger に変換されたこの BigDecimal
例外:
ArithmeticException - this が 0 以外の 小数部を持つ場合
導入されたバージョン:
1.5

longValue

public long longValue()
この BigDecimallong に変換します。この変換は、『Java 言語仕様』で定義された double から short への 「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。 結果の「BigInteger」が長すぎて long 内に収まらない場合、下位 64 ビットだけが返されます。この変換により、この BigDecimal 値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。

定義:
クラス Number 内の longValue
戻り値:
long に変換されたこの BigDecimal

longValueExact

public long longValueExact()
この BigDecimallong に変換し、失われた情報がないかどうかを確認します。この BigDecimal に 0 以外の小数部がある、または long の結果として可能な範囲外である場合、ArithmeticException がスローされます。

戻り値:
long に変換されたこの BigDecimal
例外:
ArithmeticException - this が 0 以外の 小数部を持つ、または long 内に収まらない場合
導入されたバージョン:
1.5

intValue

public int intValue()
この BigDecimalint に変換します。この変換は、『Java 言語仕様』で定義された double から short への 「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。 結果の「BigInteger」が長すぎて int 内に収まらない場合、下位 32 ビットだけが返されます。この変換により、この BigDecimal 値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。

定義:
クラス Number 内の intValue
戻り値:
int に変換されたこの BigDecimal

intValueExact

public int intValueExact()
この BigDecimalint に変換し、失われた情報がないかどうかを確認します。この BigDecimal に 0 以外の小数部がある、または int の結果として可能な範囲外である場合、ArithmeticException がスローされます。

戻り値:
int に変換されたこの BigDecimal
例外:
ArithmeticException - this が 0 以外の 小数部を持つ、または int 内に収まらない場合
導入されたバージョン:
1.5

shortValueExact

public short shortValueExact()
この BigDecimalshort に変換し、失われた情報がないかどうかを確認します。この BigDecimal に 0 以外の小数部がある、または short の結果として可能な範囲外である場合、ArithmeticException がスローされます。

戻り値:
short に変換されたこの BigDecimal
例外:
ArithmeticException - this が 0 以外の 小数部を持つ、または short 内に収まらない場合
導入されたバージョン:
1.5

byteValueExact

public byte byteValueExact()
この BigDecimalbyte に変換し、失われた情報がないかどうかを確認します。この BigDecimal に 0 以外の小数部がある、または byte の結果として可能な範囲外である場合、ArithmeticException がスローされます。

戻り値:
byte に変換されたこの BigDecimal
例外:
ArithmeticException - this が 0 以外の 小数部を持つ、または byte 内に収まらない場合
導入されたバージョン:
1.5

floatValue

public float floatValue()
この BigDecimalfloat に変換します。この変換は、『Java 言語仕様』で定義された double から float への 「ナロープリミティブ変換」と同様です。この BigDecimal の絶対値が大きすぎて float として表現できない場合、適宜 Float.NEGATIVE_INFINITY または Float.POSITIVE_INFINITY に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。

定義:
クラス Number 内の floatValue
戻り値:
float に変換されたこの BigDecimal

doubleValue

public double doubleValue()
この BigDecimaldouble に変換します。この変換は、『Java 言語仕様』で定義された double から float への 「ナロープリミティブ変換」と同様です。この BigDecimal の絶対値が大きすぎて double として表現できない場合、適宜 Double.NEGATIVE_INFINITY または Double.POSITIVE_INFINITY に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。

定義:
クラス Number 内の doubleValue
戻り値:
double に変換されたこの BigDecimal

ulp

public BigDecimal ulp()
この BigDecimal の ulp (最終桁単位) のサイズを返します。0 以外の BigDecimal 値の ulp は、この値と、次に大きい絶対値および同じ桁数を持つ BigDecimal 値の間の正の距離です。値 0 の ulp は、スケール this を持つ 1 と数値が等しくなります。結果は this と同じスケールで格納され、0 および 0 以外の値の結果は [1, this.scale()] と等しくなります。

戻り値:
this の ulp のサイズ
導入されたバージョン:
1.5

JavaTM Platform
Standard Ed. 6

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

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