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 の文字配列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。 |
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)
です。ArithmeticException
- スケールが 32 ビット整数の範囲外である場合。public BigDecimal stripTrailingZeros()
BigDecimal
を返します。たとえば、[6000, 1] に等しい [BigInteger
, scale
] コンポーネントを持つ BigDecimal
値 600.0
から末尾の 0 を取り除くと、[6, -2] に等しい [BigInteger
, scale
] コンポーネントを持つ 6E2
になります。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™ 言語仕様』のセクション 5.1.3 で定義された double
から float
へのナロープリミティブ変換と同様です。この BigDecimal
が大きすぎて float
として表現できない場合、適宜 Float.NEGATIVE_INFINITY
または Float.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal
値の精度に関する情報が失われる可能性があります。floatValue
、クラス: Number
float
に変換されたこの BigDecimal
。public double doubleValue()
BigDecimal
を double
に変換します。この変換は、『Java™ 言語仕様』のセクション 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, 2013, Oracle and/or its affiliates. All rights reserved.