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
を優先する方法で解決されます。
同じ数値でも表現が異なる(スケールが異なる)可能性があるため、算術および丸めのルールは、数値的な結果と、結果の表現に使用するスケールの両方を指定する必要があります。
一般に、正確な結果に、返される桁数よりも多くの桁(除算の場合はおそらく無限大)がある場合、丸めモードと精度設定により、演算が返す結果の桁数が決まります。まず、返される桁の合計数はMathContext
のprecision
設定で指定されます。これにより、結果の精度が決定されます。桁数のカウントは、正確な結果のもっとも左の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/32
は0.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単位以上、つまり1 ulp以上異なる場合があります。
BigDecimal
のスケール操作には、スケーリング/丸め演算と小数点移動演算の2種類があります。スケーリング/丸め演算(setScale
とround
)は、値がオペランドの値とほぼ(または正確に)等しいがスケールまたは精度は指定された値であるBigDecimal
を返します。このスケールまたは精度により、値に対して最小限の影響で、格納される数値の精度が上下します。小数点移動演算(movePointLeft
とmovePointRight
)は、指定した方向に指定した桁だけ小数点を移動することによりオペランドから作成されるBigDecimal
を返します。
説明をわかりやすく簡潔にするために、BigDecimal
メソッドの説明では全体を通して擬似コードを使用します。擬似コード式(i+j)
は、「値がBigDecimal
i
の値とBigDecimal
j
の値の和であるBigDecimal
」を示します。擬似コード式(i == j)
は、「BigDecimal
i
がBigDecimal
j
と同じ値を表す場合にだけtrue
であること」を示します。ほかの擬似コード式も同じように解釈されます。角カッコは、BigDecimal
値を定義する特別なBigInteger
とスケールのペアを表すために使用されます。たとえば、[19, 2]は、スケール2を持つ0.19と数値的に等しいBigDecimal
です。
注: BigDecimal
オブジェクトをSortedMap
の鍵またはSortedSet
の要素として使用する場合は、注意してください。BigDecimal
の自然順序付けがequalsと矛盾するからです。詳細については、Comparable
、SortedMap
または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)
BigInteger をBigDecimal に変換します。 |
BigDecimal(BigInteger unscaledVal, int scale)
BigInteger のスケールなしの値とint のスケールをBigDecimal に変換します。 |
BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
コンテキスト設定に従った丸めを使用して、
BigInteger のスケールなしの値とint のスケールをBigDecimal に変換します。 |
BigDecimal(BigInteger val, MathContext mc)
コンテキスト設定に従った丸めを使用して、
BigInteger をBigDecimal に変換します。 |
BigDecimal(char[] in)
|
BigDecimal(char[] in, int offset, int len)
|
BigDecimal(char[] in, int offset, int len, MathContext mc)
部分配列の指定を可能にし、コンテキスト設定に従った丸めを使用しつつ、
BigDecimal の文字配列表現をBigDecimal に変換して、同じ文字シーケンスをBigDecimal(String) コンストラクタとして受け取ります。 |
BigDecimal(char[] in, MathContext mc)
|
BigDecimal(double val)
double をdouble のバイナリ浮動小数点値の正確な10進数表現であるBigDecimal に変換します。 |
BigDecimal(double val, MathContext mc)
コンテキスト設定に従った丸めを使用して、
double をBigDecimal に変換します。 |
BigDecimal(int val)
int をBigDecimal に変換します。 |
BigDecimal(int val, MathContext mc)
コンテキスト設定に従った丸めを使用して、
int をBigDecimal に変換します。 |
BigDecimal(long val)
long をBigDecimal に変換します。 |
BigDecimal(long val, MathContext mc)
コンテキスト設定に従った丸めを使用して、
long をBigDecimal に変換します。 |
BigDecimal(String val)
BigDecimal の文字列表現をBigDecimal に変換します。 |
BigDecimal(String val, MathContext mc)
|
修飾子と型 | メソッドと説明 |
---|---|
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()
この
BigDecimal をbyte に変換し、失われた情報がないかどうかを確認します。 |
int |
compareTo(BigDecimal val)
この
BigDecimal を指定されたBigDecimal と比較します。 |
BigDecimal |
divide(BigDecimal divisor)
値が
(this /divisor) で優先スケールが(this.scale() - divisor.scale()) であるBigDecimal を返します。(小数点以下が無限となるため)正確な商を表現できない場合、ArithmeticException がスローされます。 |
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()
この
BigDecimal をdouble に変換します。 |
boolean |
equals(Object x)
この
BigDecimal が指定されたObject と同じかどうか比較します。 |
float |
floatValue()
この
BigDecimal をfloat に変換します。 |
int |
hashCode()
この
BigDecimal のハッシュ・コードを返します。 |
int |
intValue()
この
BigDecimal をint に変換します。 |
int |
intValueExact()
この
BigDecimal をint に変換し、失われた情報がないかどうかを確認します。 |
long |
longValue()
この
BigDecimal をlong に変換します。 |
long |
longValueExact()
この
BigDecimal をlong に変換し、失われた情報がないかどうかを確認します。 |
BigDecimal |
max(BigDecimal val)
この
BigDecimal とval の最大値を返します。 |
BigDecimal |
min(BigDecimal val)
この
BigDecimal とval の最小値を返します。 |
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()
この
BigDecimal をshort に変換し、失われた情報がないかどうかを確認します。 |
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()
この
BigDecimal をBigInteger に変換します。 |
BigInteger |
toBigIntegerExact()
この
BigDecimal をBigInteger に変換し、失われた情報がないかどうかを確認します。 |
String |
toEngineeringString()
指数が必要な場合、技術表記法で、この
BigDecimal の文字列表現を返します。 |
String |
toPlainString()
指数フィールドなしで、この
BigDecimal の文字列表現を返します。 |
String |
toString()
指数が必要な場合、科学表記法で、この
BigDecimal の文字列表現を返します。 |
BigDecimal |
ulp()
この
BigDecimal のulp (最終桁単位)のサイズを返します。 |
BigInteger |
unscaledValue()
値がこの
BigDecimal のスケールなしの値であるBigInteger を返します。 |
static BigDecimal |
valueOf(double val)
|
static BigDecimal |
valueOf(long val)
long 値をスケールが0のBigDecimal に変換します。 |
static BigDecimal |
valueOf(long unscaledVal, int scale)
long のスケールなしの値とint のスケールをBigDecimal に変換します。 |
byteValue, shortValue
public static final BigDecimal ZERO
public static final BigDecimal ONE
public static final BigDecimal TEN
public static final int ROUND_UP
public static final int ROUND_DOWN
public static final int ROUND_CEILING
BigDecimal
が正の場合はROUND_UP
のように動作し、負の場合はROUND_DOWN
のように動作します。この丸めモードは、計算された値を減らしません。public static final int ROUND_FLOOR
BigDecimal
が正の場合はROUND_DOWN
のように動作し、負の場合はROUND_UP
のように動作します。この丸めモードは、計算された値を増やしません。public static final int ROUND_HALF_UP
ROUND_UP
のように、それ以外の場合はROUND_DOWN
のように動作します。これは我々の大半が小学校で習った丸めモードのことです。public static final int ROUND_HALF_DOWN
ROUND_UP
のように、それ以外の場合はROUND_DOWN
のように動作します。public static final int ROUND_HALF_EVEN
ROUND_HALF_UP
のように、偶数の場合はROUND_HALF_DOWN
のように動作します。この丸めモードは、連続する計算で繰返し適用される場合に累積エラーを最小限にします。public static final int ROUND_UNNECESSARY
ArithmeticException
がスローされます。public BigDecimal(char[] in, int offset, int len)
BigDecimal
の文字配列表現をBigDecimal
に変換し、同じ文字シーケンスをBigDecimal(String)
コンストラクタとして受け取り、部分配列の指定を可能にします。
文字シーケンスが文字配列内ですでに使用可能な場合、char
配列を文字列に変換し、BigDecimal(String)
コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースであるchar
配列。offset
- 調べる配列の最初の文字。len
- 検討する文字数。NumberFormatException
- in
がBigDecimal
の有効な表現でない場合、または定義された部分配列が完全にin
内にない場合。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
- in
がBigDecimal
の有効な表現でない場合、または定義された部分配列が完全にin
内にない場合。public BigDecimal(char[] in)
BigDecimal
の文字配列表現をBigDecimal
に変換し、同じ文字シーケンスをBigDecimal(String)
コンストラクタとして受け取ります。
文字シーケンスが文字配列としてすでに使用可能な場合、char
配列を文字列に変換してBigDecimal(String)
コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースであるchar
配列。NumberFormatException
- in
がBigDecimal
の有効な表現でない場合。public BigDecimal(char[] in, MathContext mc)
BigDecimal
の文字配列表現をBigDecimal
に変換し、コンテキスト設定に従った丸めを使用して、同じ文字シーケンスをBigDecimal(String)
コンストラクタとして受け取ります。
文字シーケンスが文字配列としてすでに使用可能な場合、char
配列を文字列に変換してBigDecimal(String)
コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースであるchar
配列。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。NumberFormatException
- in
が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:
- Digit
- 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
の値は、significand×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
- val
がBigDecimal
の有効な表現でない場合。public BigDecimal(String val, MathContext mc)
val
- BigDecimal
の文字列表現。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。NumberFormatException
- val
がBigDecimalの有効な表現でない場合。public BigDecimal(double val)
double
をdouble
のバイナリ浮動小数点値の正確な10進数表現であるBigDecimal
に変換します。返されたBigDecimal
のスケールは、(10scale×val)が整数となるような最小値です。
注:
new BigDecimal(0.1)
と記述すると、0.1と正確に等しいBigDecimal
(スケール1の、スケールなしの値1)が作成されると考えるかもしれませんが、実際には0.1000000000000000055511151231257827021181583404541015625と等しくなります。これは、0.1をdouble
として(または有限長2進小数として)正確に表現できないためです。したがって、コンストラクタに渡される値は正確に0.1と等しいわけではありません。
String
コンストラクタは完全に予測可能です。new BigDecimal("0.1")
と記述すると、予期したとおり正確に 0.1と等しいBigDecimal
が作成されます。そのため、通常は、これよりもStringコンストラクタを優先して使用することをお薦めします。
BigDecimal
のソースとしてdouble
を使用する必要がある場合、このコンストラクタは正確な変換を行うことに注意してください。このコンストラクタでは、Double.toString(double)
メソッドとBigDecimal(String)
コンストラクタを使用してdouble
をString
に変換したときと同じ結果にはなりません。そのような結果を得るには、static
valueOf(double)
メソッドを使用します。
val
- BigDecimal
に変換するdouble
値。NumberFormatException
- val
が無限かNaNである場合。public BigDecimal(double val, MathContext mc)
double
をBigDecimal
に変換します。BigDecimal
のスケールは、(10scale×val)が整数であるような最小値です。
このコンストラクタの結果は予想外である可能性があるため、一般的に使用はお薦めしません。BigDecimal(double)
コンストラクタの注を参照してください。
val
- BigDecimal
に変換するdouble
値。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、RoundingModeがUNNECESSARYの場合。NumberFormatException
- val
が無限かNaNである場合。public BigDecimal(BigInteger val)
BigInteger
をBigDecimal
に変換します。BigDecimal
のスケールは0です。val
- BigDecimal
に変換するBigInteger
値。public BigDecimal(BigInteger val, MathContext mc)
BigInteger
をBigDecimal
に変換します。BigDecimal
のスケールは0です。val
- BigDecimal
に変換するBigInteger
値。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal(BigInteger unscaledVal, int scale)
BigInteger
のスケールなしの値とint
のスケールをBigDecimal
に変換します。BigDecimal
の値は(unscaledVal×10-scale)です。unscaledVal
- BigDecimal
のスケールなしの値。scale
- BigDecimal
のスケール。public BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
BigInteger
のスケールなしの値とint
のスケールをBigDecimal
に変換します。BigDecimal
の値は(unscaledVal×10-scale)であり、precision
と丸めモード設定に従って丸められます。unscaledVal
- BigDecimal
のスケールなしの値。scale
- BigDecimal
のスケール。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal(int val)
int
をBigDecimal
に変換します。BigDecimal
のスケールは0です。val
- BigDecimal
に変換するint
値。public BigDecimal(int val, MathContext mc)
int
をBigDecimal
に変換します。丸めを行う前のBigDecimal
のスケールは0です。val
- BigDecimal
に変換するint
値。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal(long val)
long
をBigDecimal
に変換します。BigDecimal
のスケールは0です。val
- BigDecimal
に変換するlong
値。public BigDecimal(long val, MathContext mc)
long
をBigDecimal
に変換します。丸めを行う前のBigDecimal
のスケールは0です。val
- BigDecimal
に変換するlong
値。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public static BigDecimal valueOf(long unscaledVal, int scale)
long
のスケールなしの値とint
のスケールをBigDecimal
に変換します。この「staticファクトリ・メソッド」は、よく使われるBigDecimal
値の再利用を可能にするため、(long
, int
)コンストラクタよりも優先して提供されます。unscaledVal
- BigDecimal
のスケールなしの値。scale
- BigDecimal
のスケール。BigDecimal
。public static BigDecimal valueOf(long val)
long
値をスケールが0のBigDecimal
に変換します。この「staticファクトリ・メソッド」は、よく使われるBigDecimal
値の再利用を可能にするため、(long
)コンストラクタよりも優先して提供されます。val
- BigDecimal
の値。val
であるBigDecimal
。public static BigDecimal valueOf(double val)
Double.toString(double)
メソッドで提供されるdouble
の正規の文字列表現を使用して、double
をBigDecimal
に変換します。
注: これは一般に、double
(またはfloat
)をBigDecimal
に変換するための推奨される方法です。戻り値は、Double.toString(double)
を使用した場合の結果からBigDecimal
を構築した結果と等しいためです。
val
- BigDecimal
に変換するdouble
。val
と等しい、またはほぼ等しいBigDecimal
。NumberFormatException
- val
が無限かNaNである場合。public BigDecimal add(BigDecimal augend)
(this+augend)
でスケールがmax(this.scale(), augend.scale())
であるBigDecimal
を返します。augend
- このBigDecimal
に加算する値。this + augend
public BigDecimal add(BigDecimal augend, MathContext mc)
(this+augend)
であるBigDecimal
を返します。どちらかの数値が0で精度設定が0以外である場合、必要に応じて丸められたほかの数値が結果として使用されます。augend
- このBigDecimal
に加算する値。mc
- 使用するコンテキスト。this+augend
。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal subtract(BigDecimal subtrahend)
(this - subtrahend)
でスケールがmax(this.scale(), subtrahend.scale())
であるBigDecimal
を返します。subtrahend
- このBigDecimal
から減算する値。this - subtrahend
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
の場合。public BigDecimal multiply(BigDecimal multiplicand)
(this.scale()+multiplicand.scale())
であるBigDecimal
を返します。multiplicand
- このBigDecimal
で乗算する値。this * multiplicand
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
BigDecimal
を返します。multiplicand
- このBigDecimal
で乗算する値。mc
- 使用するコンテキスト。this * multiplicand
。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。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
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
であり、指定したスケールが除算の結果を正確に表すには十分でない場合。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
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()
が除算の結果を正確に表すには十分でない場合。public BigDecimal divide(BigDecimal divisor)
(this /divisor)
で優先スケールが(this.scale() - divisor.scale())
であるBigDecimal
を返します。(小数点以下が無限となるため)正確な商を表現できない場合、ArithmeticException
がスローされます。divisor
- このBigDecimal
を除算する値。this / divisor
ArithmeticException
- 正確な商の小数点以下が無限である場合public BigDecimal divide(BigDecimal divisor, MathContext mc)
(this /divisor)
であるBigDecimal
を返します。divisor
- このBigDecimal
を除算する値。mc
- 使用するコンテキスト。this /divisor
。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
またはmc.precision == 0
で、かつ商の小数点以下が無限である場合。public BigDecimal divideToIntegralValue(BigDecimal divisor)
(this /divisor)
の整数部であるBigDecimal
を返します。結果の優先スケールは(this.scale() - divisor.scale())
です。divisor
- このBigDecimal
を除算する値。this /divisor
の整数部。ArithmeticException
- divisor==0
の場合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
よりも桁数の多い精度が必要な場合。public BigDecimal remainder(BigDecimal divisor)
(this % divisor)
であるBigDecimal
を返します。
剰余は、this.subtract(this.divideToIntegralValue(divisor).multiply(divisor))
で得られます。これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
divisor
- このBigDecimal
を除算する値。this % divisor
。ArithmeticException
- divisor==0
の場合public BigDecimal remainder(BigDecimal divisor, MathContext mc)
(this % divisor)
であるBigDecimal
を返します。MathContext
設定は、剰余の計算に使用する暗黙的な除算に影響を及ぼします。定義の示すとおり、剰余の計算自体は正確です。そのため、剰余はmc.getPrecision()
よりも多くの桁を含む可能性があります。
剰余は、this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor))
で得られます。これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
divisor
- このBigDecimal
を除算する値。mc
- 使用するコンテキスト。this % divisor
。ArithmeticException
- divisor==0
の場合ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合、またはmc.precision
が0より大きく、this.divideToIntgralValue(divisor)
の結果にmc.precision
よりも桁数の多い精度が必要な場合。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor)
divideToIntegralValue
の結果とそれに続く2つのオペランドのremainder
の結果を含む、2要素のBigDecimal
配列を返します。
整数の商と剰余の両方が必要な場合、divideToIntegralValue
メソッドとremainder
メソッドを別々に使用するより、除算を1回だけ実行すればよいこのメソッドの方が高速であることに留意してください。
divisor
- このBigDecimal
を除算する値、および計算された剰余。BigDecimal
配列。商(divideToIntegralValue
の結果)が最初の要素で、剰余が最後の要素。ArithmeticException
- divisor==0
の場合divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
, remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
divideToIntegralValue
の結果と、2つのオペランドのremainder
の結果を含む、2要素のBigDecimal
配列を返します。
整数の商と剰余の両方が必要な場合、divideToIntegralValue
メソッドとremainder
メソッドを別々に使用するより、除算を1回だけ実行すればよいこのメソッドの方が高速であることに留意してください。
divisor
- このBigDecimal
を除算する値、および計算された剰余。mc
- 使用するコンテキスト。BigDecimal
配列。商(divideToIntegralValue
の結果)が最初の要素で、剰余が最後の要素。ArithmeticException
- divisor==0
の場合ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合、またはmc.precision
が0より大きく、this.divideToIntgralValue(divisor)
の結果にmc.precision
よりも桁数の多い精度が必要な場合。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
, remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal pow(int n)
BigDecimal
を返します。累乗は、精度の制限なしで正確に計算されます。
パラメータn
は、0から999999999の範囲に収まっている必要があります。ZERO.pow(0)
はONE
を返します。将来のリリースでは、このメソッドの指数の許容範囲が拡張される可能性があります。
n
- このBigDecimal
の累乗。ArithmeticException
- n
が範囲外の場合。public BigDecimal pow(int n, MathContext mc)
BigDecimal
を返します。現在の実装では、コンテキスト設定に従った丸めでANSI規格X3.274-1996で定義されたコア・アルゴリズムを使用しています。一般的に、返された数値は、選択された精度の正確な数値の2 ulp以内です。将来のリリースでは、誤差の許容範囲を狭め、指数の許容範囲を拡大した別のアルゴリズムを使用する可能性があります。
X3.274-1996アルゴリズムは、次のとおりです。
ArithmeticException
例外は次の条件に当てはまる場合にスローされる
abs(n) > 999999999
mc.precision == 0
かつn < 0
mc.precision> 0
、かつn
がmc.precision
の10進桁数より大きい
n
が0の場合、this
が0でもONE
が返される。それ以外の場合は、次のようになる
n
が正の場合、二乗法を繰り返して単一のアキュムレータに入れることで結果が計算される。アキュムレータを持つ個々の乗算では、mc.precision+elength+1
(elength
はn
内の10進桁数)に上げた精度を除き、mc
と同じ数学コンテキスト設定を使用する。
n
が負の場合、n
が正であるかのように結果が計算される。その後、この値は前述の有効な精度を使用して1より除算される。
n
- このBigDecimal
の累乗。mc
- 使用するコンテキスト。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合、またはn
が範囲外である場合。public BigDecimal abs()
BigDecimal
の絶対値でスケールがthis.scale()
であるBigDecimal
を返します。abs(this)
public BigDecimal abs(MathContext mc)
BigDecimal
の絶対値であるBigDecimal
を返します。mc
- 使用するコンテキスト。abs(this)
。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal negate()
(-this)
でスケールがthis.scale()
であるBigDecimal
を返します。-this
。public BigDecimal negate(MathContext mc)
(-this)
であるBigDecimal
を返します。mc
- 使用するコンテキスト。-this
。ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。public BigDecimal plus()
(+this)
でスケールがthis.scale()
であるBigDecimal
を返します。
このBigDecimal
を単に返すだけのこのメソッドは、単項マイナス・メソッドnegate()
の対称として含まれています。
this
。negate()
public BigDecimal plus(MathContext mc)
mc
- 使用するコンテキスト。this
。0の結果のスケールは0ArithmeticException
- 結果が正確でなく、丸めモードがUNNECESSARY
の場合。round(MathContext)
public int signum()
BigDecimal
の符号要素を返します。BigDecimal
が負の場合は -1、ゼロの場合は0、正の場合は1。public int scale()
BigDecimal
のスケールを返します。0または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする10の累乗を乗算します。たとえば、-3
のスケールでは、スケールなしの値に1000が乗算されます。BigDecimal
のスケール。public int precision()
BigDecimal
の精度を返します。精度とは、スケールなしの値の桁数のことです。
0の精度は1です。
BigDecimal
の精度。public BigInteger unscaledValue()
BigDecimal
のスケールなしの値であるBigInteger
を返します。((this * 10this.scale())を計算する。)BigDecimal
のスケールなしの値。public BigDecimal round(MathContext mc)
MathContext
設定に従って丸められたBigDecimal
を返します。精度設定が0の場合、丸めは実行されません。
このメソッドの効果は、plus(MathContext)
メソッドの効果と同じです。
mc
- 使用するコンテキスト。MathContext
設定に従って丸められたBigDecimal
。ArithmeticException
- 丸めモードがUNNECESSARY
で、BigDecimal
演算に丸めが必要な場合。plus(MathContext)
public BigDecimal setScale(int newScale, RoundingMode roundingMode)
BigDecimal
のスケールなしの値と、総体値を維持できる適当な10の累乗の積または商により決定されるBigDecimal
を返します。スケールが演算で減らされる場合、スケールなしの値は(乗算ではなく)除算する必要があり、値が変わる可能性があります。この場合、指定した丸めモードが除算に適用されます。
BigDecimalオブジェクトは不変であるため、setXメソッドでフィールドX
を変更する通常の場合とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale
は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
newScale
- 返されるBigDecimal
の値のスケール。roundingMode
- 適用する丸めモード。BigDecimal
。そのスケールなしの値は、このBigDecimal
のスケールなしの値と、総体値を維持できる適当な10の累乗との積または商により決定されます。ArithmeticException
- roundingMode==UNNECESSARY
であり、指定したスケール演算で丸めが必要な場合。RoundingMode
public BigDecimal setScale(int newScale, int roundingMode)
BigDecimal
のスケールなしの値と、総体値を維持できる適当な10の累乗の積または商により決定されるBigDecimal
を返します。スケールが演算で減らされる場合、スケールなしの値は(乗算ではなく)除算する必要があり、値が変わる可能性があります。この場合、指定した丸めモードが除算に適用されます。
BigDecimalオブジェクトは不変であるため、setXメソッドでフィールドX
を変更する通常の場合とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale
は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
このレガシー・メソッドよりも、新しいsetScale(int, RoundingMode)
メソッドを使用してください。
newScale
- 返されるBigDecimal
の値のスケール。roundingMode
- 適用する丸めモード。BigDecimal
。そのスケールなしの値は、このBigDecimal
のスケールなしの値と、総体値を維持できる適当な10の累乗との積または商により決定されます。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
public BigDecimal setScale(int newScale)
BigDecimal
と同じ数値である、BigDecimal
を返します。これが不可能な場合、ArithmeticException
をスローします。
通常、この呼出しはスケールの拡張に使用され、その場合には指定されたスケールと正しい値のBigDecimal
の存在が保証されます。値を変更することなく再スケーリングを行うのに十分な0がBigDecimal
の小数部(その整数値における10の因数)の最後にあることを呼出し側が認識している場合、この呼出しはスケールの縮小にも使用できます。
このメソッドはsetScale
の2つの引数を使うバージョンと同じ結果を返しますが、丸めを指定する必要のない場合に、呼出し側は丸めモードを指定する手間を省くことができます。
BigDecimal
オブジェクトは不変であるため、setXメソッドでフィールドX
を変更する通常の場合とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale
は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
newScale
- 返されるBigDecimal
の値のスケール。BigDecimal
。そのスケールなしの値は、このBigDecimal
のスケールなしの値と、総体値を維持できる適当な10の累乗との積または商により決定されます。ArithmeticException
- 指定したスケール演算で丸めが必要な場合。setScale(int, int)
, setScale(int, RoundingMode)
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
- スケールがオーバーフローする場合。public BigDecimal movePointRight(int n)
n
桁右へ移動してこれに等しいBigDecimal
を返します。n
が負でない場合は、スケールからn
を単に減算します。n
が負の場合は、movePointLeft(-n)
に等しくなります。この呼出しによって返されるBigDecimal
は、値(this×10n)およびスケールmax(this.scale()-n, 0)
となります。n
- 小数点を右へ移動する桁数。n
桁右へ移動した、これに等しいBigDecimal
。ArithmeticException
- スケールがオーバーフローする場合。public BigDecimal scaleByPowerOfTen(int n)
this
* 10n)に等しいBigDecimalを返します。結果のスケールは(this.scale() - n)
です。n
- スケールを指定する10の累乗の指数this
* 10n)に等しいBigDecimalArithmeticException
- スケールが32ビット整数の範囲外である場合。public BigDecimal stripTrailingZeros()
BigDecimal
を返します。たとえば、[6000, 1]に等しい[BigInteger
, scale
]コンポーネントを持つBigDecimal
値600.0
から末尾の0を取り除くと、[6, -2]に等しい[BigInteger
, scale
]コンポーネントを持つ6E2
になります。このBigDecimalの数値が0に等しい場合は、BigDecimal.ZERO
が返されます。BigDecimal
。public int compareTo(BigDecimal val)
BigDecimal
を指定されたBigDecimal
と比較します。このメソッドでは、値は等しいがスケールが異なる2つのBigDecimal
オブジェクト(たとえば、2.0と2.00)が等しいと見なされます。このメソッドは、6つのboolean型の比較演算子(<、==、>、>=、!=、<=)のそれぞれに対する個々のメソッドの代わりに提供されます。これらの比較を行うには(x.compareTo(y)
<op> 0)
という組合せをお薦めします。この場合、<op>には6つの比較演算子のうちの1つが入ります。compareTo
、インタフェース: Comparable<BigDecimal>
val
- このBigDecimal
と比較するBigDecimal
。BigDecimal
の数値がval
より小さい場合は -1、等しい場合は0、大きい場合は1。public boolean equals(Object x)
BigDecimal
が指定されたObject
と同じかどうか比較します。compareTo
と違い、このメソッドは、2つのBigDecimal
オブジェクトが値もスケールも同じである場合にだけ等しいと見なします(したがって、このメソッドでは2.0と2.00は等しくない)。equals
、クラス: Object
x
- このBigDecimal
と比較するObject
。Object
がBigDecimal
で、その値とスケールがこのBigDecimal
と等しい場合にだけtrue
。compareTo(java.math.BigDecimal)
, hashCode()
public BigDecimal min(BigDecimal val)
BigDecimal
とval
の最小値を返します。val
- 最小値の計算に使用する値。BigDecimal
とval
のうちで小さい方の値を持つBigDecimal
。等しい場合は、compareTo
メソッドで定義されるように、this
が返されます。compareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
BigDecimal
とval
の最大値を返します。val
- 最大値の計算に使用する値。BigDecimal
とval
のうちで大きい方の値を持つBigDecimal
。等しい場合は、compareTo
メソッドで定義されるように、this
が返されます。compareTo(java.math.BigDecimal)
public int hashCode()
BigDecimal
のハッシュ・コードを返します。値が等しいがスケールが異なる2つのBigDecimal
オブジェクト(たとえば、2.0と2.00)のハッシュ・コードは、通常は同じではありません。hashCode
、クラス: Object
BigDecimal
のハッシュ・コード。equals(Object)
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"注:
BigDecimal
値とこの変換の結果の間には、1対1のマッピングがあります。つまり、すべての区別可能なBigDecimal
値(スケールなしの値とスケール)は、toString
を使用した結果として、一意の文字列表現を持ちます。BigDecimal(String)
コンストラクタを使用してその文字列表現をBigDecimal
に戻すと、元の値が復元されます。
NumberFormat
クラスとそのサブクラスによって処理されます。
toEngineeringString()
メソッドを使用でき、BigDecimal
の丸めには小数点以下の桁数が既知であるsetScale
メソッドを使用できます。
Character.forDigit
により提供される数字から文字へのマッピングが使用されます。
toString
、クラス: Object
BigDecimal
の文字列表現。Character.forDigit(int, int)
, BigDecimal(java.lang.String)
public String toEngineeringString()
BigDecimal
の文字列表現を返します。
toString()
メソッドで記述されているように、BigDecimal
を表す文字列を返します。ただし、指数表現が使用される場合、0でない値の整数部が1から999の範囲に収まるように、10の累乗は3の倍数(技術表記法)に調整されます。値0について指数表現が使用される場合、値0のスケールを維持するために小数点と1つまたは2つの小数部の桁が使用されます。toString()
の出力と違い、このメソッドの出力では、文字列コンストラクタを使用して出力文字列をBigDecimal
に戻したときに、BigDecimal
の同じ[integer, scale]ペアの復元は保証されないことに注意してください。このメソッドの結果は、文字列コンストラクタをメソッドの出力に適用した結果と等価な数値を常に生成するという弱い制約を満たします。
BigDecimal
の文字列表現。public String toPlainString()
BigDecimal
の文字列表現を返します。正のスケールを持つ値の場合、小数点以下の桁数は、スケールを示すために使用されます。スケールが0または負の値の場合、結果の文字列は、その値がスケール0を持つ数値的に等価な値に変換され、スケール0の値の末尾の0すべてが結果に存在するかのように生成されます。スケールなしの値が0未満の場合、文字列全体の先頭にマイナス符号文字「-」(「\u002D」)が付けられます。スケールなしの値が0または正の場合、符号文字は付けられません。このメソッドの結果が文字列コンストラクタに渡される場合、このBigDecimal
の数値だけが必ず復元されます。新しいBigDecimal
の表現は異なるスケールを持つ可能性があります。特に、このBigDecimal
が負のスケールを持つ場合、このメソッドの結果の文字列は、文字列コンストラクタによって処理されるときにスケール0を持ちます。(このメソッドの動作は、1.4以前のリリースでのtoString
メソッドと同様です。)BigDecimal
の文字列表現。toString()
, toEngineeringString()
public BigInteger toBigInteger()
BigDecimal
をBigInteger
に変換します。この変換は、『Java™言語仕様』のセクション5.1.3で定義されたdouble
からlong
へのナロー・プリミティブ変換と同様です。このBigDecimal
の小数部はすべて破棄されます。この変換により、BigDecimal
値の精度に関する情報が失われる可能性があります。
変換が正確でない(つまり、0以外の小数部が破棄される)場合に例外をスローするには、toBigIntegerExact()
メソッドを使用してください。
BigInteger
に変換されたこのBigDecimal
。public BigInteger toBigIntegerExact()
BigDecimal
をBigInteger
に変換し、失われた情報がないかどうかを確認します。このBigDecimal
に0以外の小数部がある場合、例外がスローされます。BigInteger
に変換されたこのBigDecimal
。ArithmeticException
- this
が0以外の小数部を持つ場合。public long longValue()
BigDecimal
をlong
に変換します。この変換は、『Java™言語仕様』のセクション5.1.3で定義されたdouble
からshort
へのナロー・プリミティブ変換と同様です。このBigDecimal
の小数部はすべて破棄されます。結果の「BigInteger
」が長すぎてlong
内に収まらない場合、下位64ビットだけが返されます。この変換により、このBigDecimal
値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。public long longValueExact()
BigDecimal
をlong
に変換し、失われた情報がないかどうかを確認します。このBigDecimal
に0以外の小数部がある、またはlong
の結果として可能な範囲外である場合、ArithmeticException
がスローされます。long
に変換されたこのBigDecimal
。ArithmeticException
- this
が0以外の小数部を持つ、またはlong
内に収まらない場合。public int intValue()
BigDecimal
をint
に変換します。この変換は、『Java™言語仕様』のセクション5.1.3で定義されたdouble
からshort
へのナロー・プリミティブ変換と同様です。このBigDecimal
の小数部はすべて破棄されます。結果の「BigInteger
」が長すぎてint
内に収まらない場合、下位32ビットだけが返されます。この変換により、このBigDecimal
値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。public int intValueExact()
BigDecimal
をint
に変換し、失われた情報がないかどうかを確認します。このBigDecimal
に0以外の小数部がある、またはint
の結果として可能な範囲外である場合、ArithmeticException
がスローされます。int
に変換されたこのBigDecimal
。ArithmeticException
- this
が0以外の小数部を持つ、またはint
内に収まらない場合。public short shortValueExact()
BigDecimal
をshort
に変換し、失われた情報がないかどうかを確認します。このBigDecimal
に0以外の小数部がある、またはshort
の結果として可能な範囲外である場合、ArithmeticException
がスローされます。short
に変換されたこのBigDecimal
。ArithmeticException
- this
が0以外の小数部を持つ、またはshort
内に収まらない場合。public byte byteValueExact()
BigDecimal
をbyte
に変換し、失われた情報がないかどうかを確認します。このBigDecimal
に0以外の小数部がある、またはbyte
の結果として可能な範囲外である場合、ArithmeticException
がスローされます。byte
に変換されたこのBigDecimal
。ArithmeticException
- this
が0以外の小数部を持つ、またはbyte
内に収まらない場合。public float floatValue()
BigDecimal
をfloat
に変換します。この変換は、『Java(tm)言語仕様』のセクション5.1.3で定義されたdouble
からfloat
への縮小プリミティブ変換と同様です。このBigDecimal
の絶対値が大きすぎてfloat
として表現できない場合、適宜Float.NEGATIVE_INFINITY
またはFloat.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal
値の精度に関する情報が失われる可能性があります。floatValue
、クラス: Number
float
に変換されたこのBigDecimal
。public double doubleValue()
BigDecimal
をdouble
に変換します。この変換は、『Java(tm)言語仕様』のセクション5.1.3で定義されたdouble
からfloat
への縮小プリミティブ変換と同様です。このBigDecimal
の絶対値が大きすぎてdouble
として表現できない場合、適宜Double.NEGATIVE_INFINITY
またはDouble.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal
値の精度に関する情報が失われる可能性があります。doubleValue
、クラス: Number
double
に変換されたこのBigDecimal
。public BigDecimal ulp()
BigDecimal
のulp (最終桁単位)のサイズを返します。0以外のBigDecimal
値のulpは、この値と、次に大きい絶対値および同じ桁数を持つBigDecimal
値の間の正の距離です。値0のulpは、スケールthis
を持つ1と数値が等しくなります。結果はthis
と同じスケールで格納され、0および0以外の値の結果は[1, this.scale()]
と等しくなります。this
のulpのサイズ バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.