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, shortValuepublic 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:
eE- 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 + augendpublic 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 - subtrahendpublic 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 * multiplicandpublic 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 / divisorArithmeticException - 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_UNNECESSARYpublic BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)
(this /divisor)で、スケールが指定されたものであるBigDecimalを返します。丸めを行い、指定したスケールで結果を生成する必要がある場合は、指定した丸めモードが適用されます。divisor - このBigDecimalを除算する値。scale - 返されるBigDecimalの商のスケール。roundingMode - 適用する丸めモード。this / divisorArithmeticException - divisorが0で、roundingMode==RoundingMode.UNNECESSARYであり、指定したスケールが除算の結果を正確に表すには十分でない場合。public BigDecimal divide(BigDecimal divisor, int roundingMode)
(this /divisor)でスケールがthis.scale()であるBigDecimalを返します。丸めを行い、特定のスケールで結果を生成する必要がある場合は、指定された丸めモードが適用されます。
このレガシー・メソッドよりも、新しいdivide(BigDecimal, RoundingMode)メソッドを使用してください。
divisor - このBigDecimalを除算する値。roundingMode - 適用する丸めモード。this / divisorArithmeticException - 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_UNNECESSARYpublic BigDecimal divide(BigDecimal divisor, RoundingMode roundingMode)
(this /divisor)でスケールがthis.scale()であるBigDecimalを返します。丸めを行い、特定のスケールで結果を生成する必要がある場合は、指定された丸めモードが適用されます。divisor - このBigDecimalを除算する値。roundingMode - 適用する丸めモード。this / divisorArithmeticException - divisor==0である場合、またはroundingMode==RoundingMode.UNNECESSARYであり、this.scale()が除算の結果を正確に表すには十分でない場合。public BigDecimal divide(BigDecimal divisor)
(this /divisor)で優先スケールが(this.scale() - divisor.scale())であるBigDecimalを返します。(小数点以下が無限となるため)正確な商を表現できない場合、ArithmeticExceptionがスローされます。divisor - このBigDecimalを除算する値。this / divisorArithmeticException - 正確な商の小数点以下が無限である場合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であり、指定したスケール演算で丸めが必要な場合。RoundingModepublic 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_UNNECESSARYpublic 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、クラス: Objectx - この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、クラス: ObjectBigDecimalのハッシュ・コード。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、クラス: ObjectBigDecimalの文字列表現。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、クラス: Numberfloatに変換されたこのBigDecimal。public double doubleValue()
BigDecimalをdoubleに変換します。この変換は、『Java(tm)言語仕様』のセクション5.1.3で定義されたdoubleからfloatへの縮小プリミティブ変換と同様です。このBigDecimalの絶対値が大きすぎてdoubleとして表現できない場合、適宜Double.NEGATIVE_INFINITYまたはDouble.POSITIVE_INFINITYに変換されます。戻り値が有限である場合も、この変換により、BigDecimal値の精度に関する情報が失われる可能性があります。doubleValue、クラス: Numberdoubleに変換されたこの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.