|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.Number java.math.BigDecimal
public class 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」が返される結果の先頭の桁位置になります。
論理的に正確な結果のほか、各算術演算には結果を表現するために優先されるスケールがあります。各演算の優先スケールを、次の表に示します。
Operation | 優先される結果のスケール |
---|---|
加算 | max(addend.scale(), augend.scale()) |
減算 | max(minuend.scale(), subtrahend.scale()) |
乗算 | multiplier.scale() + multiplicand.scale() |
除算 | dividend.scale() - divisor.scale() |
丸めの前は、論理的に正確な中間結果のスケールがその演算の優先スケールです。正確な数値結果を precision
桁で表現できない場合、丸めにより返す桁セットが選択され、その結果のスケールは中間結果のスケールから、実際に返される precision
桁を表すことのできる最小のスケールに縮小されます。正確な結果が precision
桁で表現できる場合、その結果の表現は優先スケールにもっとも近いスケールで返されます。特に、正確に表現可能な商は、後続の 0 と削除し、スケールを小さくすることで、precision
桁よりも少ない桁で表現できます。たとえば、floor 丸めモードを使用した 3 桁への丸めでは、次のようになります。
19/100 = 0.19 // integer=19, scale=2
ただし、次も成り立ちます。
21/110 = 0.190 // integer=190, scale=3
加算、減算、および乗算では、スケールの縮小は、正確な結果の破棄される桁位置の数と等しくなる点に注意してください。丸めによる桁の繰り上げで新しい上位の桁位置が作成される場合、新しい桁位置が作成されないと、結果の追加された桁は破棄されます。
ほかのメソッドは、少し異なる丸めセマンティクスを持つ可能性があります。たとえば、指定されたアルゴリズムを使用する pow メソッドの結果は、丸められた数学的結果と 1 ulp 以上異なる場合があります。
BigDecimal のスケール操作には、スケーリング/丸め演算と小数点移動演算の 2 種類があります。スケーリング/丸め演算 (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 の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。 |
|
BigDecimal(char[] in,
int offset,
int len)
BigDecimal の文字配列表現を BigDecimal に変換し、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取り、部分配列の指定を可能にします。 |
|
BigDecimal(char[] in,
int offset,
int len,
MathContext mc)
部分配列の指定を可能にし、コンテキスト設定に従った丸めを使用しつつ、BigDecimal の文字配列表現を BigDecimal に変換して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。 |
|
BigDecimal(char[] in,
MathContext mc)
BigDecimal の文字配列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字シーケンスを BigDecimal(String) コンストラクタとして受け取ります。 |
|
BigDecimal(double val)
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 の文字列表現を BigDecimal に変換し、コンテキスト設定に従った丸めを使用して、同じ文字列を BigDecimal(String) コンストラクタとして受け取ります。 |
メソッドの概要 | |
---|---|
BigDecimal |
abs()
値がこの BigDecimal の絶対値でスケールが this.scale() の BigDecimal を返します。 |
BigDecimal |
abs(MathContext mc)
コンテキスト設定に従った丸めを使用して、値がこの BigDecimal の絶対値である BigDecimal を返します。 |
BigDecimal |
add(BigDecimal augend)
値が (this + augend) でスケールが max(this.scale(), augend.scale()) の BigDecimal を返します。 |
BigDecimal |
add(BigDecimal augend,
MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this + augend) である BigDecimal を返します。 |
byte |
byteValueExact()
この BigDecimal を byte に変換し、失われた情報がないかどうかを確認します。 |
int |
compareTo(BigDecimal val)
この BigDecimal と指定された BigDecimal を比較します。 |
BigDecimal |
divide(BigDecimal divisor)
値が (this / divisor) で優先スケールが (this.scale() - divisor.scale()) である BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal divisor,
int roundingMode)
値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
int roundingMode)
値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
RoundingMode roundingMode)
値が (this / divisor) で、スケールが指定されたものである BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal divisor,
MathContext mc)
コンテキスト設定に従った丸めを使用して、値が (this / divisor) である BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal divisor,
RoundingMode roundingMode)
値が (this / divisor) でスケールが this.scale() である BigDecimal を返します。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor)
divideToIntegralValue の結果とそれに続く 2 つのオペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor,
MathContext mc)
コンテキスト設定に従った丸めを使用して計算された divideToIntegralValue の結果と、2 つのオペランドの remainder の結果を含む、2 要素の BigDecimal 配列を返します。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor)
値が丸められた商 (this / divisor) の整数部である BigDecimal を返します。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor,
MathContext mc)
値が (this / divisor) の整数部である BigDecimal を返します。 |
double |
doubleValue()
この 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 を返します((this * 10this.scale()) を計算する)。 |
static BigDecimal |
valueOf(double val)
|
static BigDecimal |
valueOf(long val)
long 値をスケールが 0 の BigDecimal に変換します。 |
static BigDecimal |
valueOf(long unscaledVal,
int scale)
long のスケールなしの値と int のスケールを BigDecimal に変換します。 |
クラス java.lang.Number から継承されたメソッド |
---|
byteValue, shortValue |
クラス java.lang.Object から継承されたメソッド |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
フィールドの詳細 |
---|
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
public static final int ROUND_FLOOR
public static final int ROUND_HALF_UP
public static final int ROUND_HALF_DOWN
public static final int ROUND_HALF_EVEN
public static final int ROUND_UNNECESSARY
コンストラクタの詳細 |
---|
public BigDecimal(char[] in, int offset, int len)
BigDecimal(String)
コンストラクタとして受け取り、部分配列の指定を可能にします。
文字シーケンスが文字配列内ですでに使用可能な場合、char 配列を文字列に変換し、BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースである char 配列offset
- 調べる配列の最初の文字len
- 検討する文字数
NumberFormatException
- in が BigDecimal の有効な表現でない場合、または定義された部分配列が完全に in 内にない場合public BigDecimal(char[] in, int offset, int len, MathContext mc)
BigDecimal(String)
コンストラクタとして受け取ります。
文字シーケンスが文字配列内ですでに使用可能な場合、char 配列を文字列に変換し、BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースである char 配列offset
- 調べる配列の最初の文字len
- 検討する文字数mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合
NumberFormatException
- in が BigDecimal の有効な表現でない場合、または定義された部分配列が完全に in 内にない場合public BigDecimal(char[] in)
BigDecimal(String)
コンストラクタとして受け取ります。
文字シーケンスが文字配列としてすでに使用可能な場合、char 配列を文字列に変換して BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースである char 配列
NumberFormatException
- in が BigDecimal の有効な文字列表現でない場合public BigDecimal(char[] in, MathContext mc)
BigDecimal(String)
コンストラクタとして受け取ります。
文字シーケンスが文字配列としてすでに使用可能な場合、char 配列を文字列に変換して BigDecimal(String) コンストラクタを使用するよりも、このコンストラクタを使った方が高速です。
in
- 文字のソースである char 配列mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合
NumberFormatException
- in が BigDecimal の有効な文字列表現でない場合public BigDecimal(String val)
小数部は、小数点と 0 桁以上の 10 進数字で構成されます。この文字列では、整数部または小数部が少なくとも 1 桁は必要です。符号、整数部、分数部からなる数字は「有効数字」と呼ばれます。
指数は、「e」(「\u0065」) または「E」(「\u0045」) という文字に、1 つ以上の 10 進数字が続くかたちで構成されます。指数値は -Integer.MAX_VALUE
(Integer.MIN_VALUE
+1) から Integer.MAX_VALUE
の範囲の値である必要があります。
つまり、このコンストラクタが受け入れる文字列は次の文法によって記述されます。
- BigDecimalString:
- Signopt Significand Exponentopt
- Sign:
- +
- -
- Significand:
- IntegerPart .FractionPartopt
- . FractionPart
- IntegerPart
- IntegerPart:
- Digits
- FractionPart:
- Digits
- Exponent:
- ExponentIndicator SignedInteger
- ExponentIndicator:
- e
- E
- SignedInteger:
- Signopt Digits
- Digits:
- 数字
- Digits Digit
- Digit:
Character.isDigit(char)
が true を返す任意の文字 (0、1、2 など)
返される BigDecimal のスケールは、小数部の桁数または 0 (文字列に小数部がない場合) となり、指数を調整します。 文字列に指数がある場合、スケールから指数が減算されます。結果のスケール値は、Integer.MIN_VALUE から Integer.MAX_VALUE の範囲の値である必要があります。
文字から数字へのマッピングは Character.digit(char, int)
で提供され、基数 10 への変換に設定されます。 String には、不適切な文字 (空白など) を含めることはできません。
例:
返される BigDecimal の値は、「有効数字」× 10 exponent と等しくなります。左側に各文字列、右側に結果の表現 [BigInteger, scale] が示されます。
"0" [0,0] "0.00" [0,2] "123" [123,0] "-123" [-123,0] "1.23E3" [123,-1] "1.23E+3" [123,-1] "12.3E+7" [123,-6] "12.0" [120,1] "12.3" [123,1] "0.00123" [123,5] "-1.23E-12" [-123,14] "1234.5E-4" [12345,5] "0E+7" [0,-7] "-0" [0,0]
注:float および double の NaN、および ±Infinity 以外の値では、このコンストラクタは Float.toString(float)
および Double.toString(double)
で返される値と互換性があります。この方法では、BigDecimal(double)
コンストラクタで予測ができないことによる影響を受けないため、float または double を BigDecimal に変換する望ましい方法です。
val
- BigDecimal の文字列表現
NumberFormatException
- val が BigDecimal の有効な文字列表現でない場合public BigDecimal(String val, MathContext mc)
BigDecimal(String)
コンストラクタとして受け取ります。
val
- BigDecimal の文字列表現mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合
NumberFormatException
- val が BigDecimal の有効な文字列表現でない場合public BigDecimal(double val)
注 -
Double.toString(double)
メソッドと BigDecimal(String)
コンストラクタを使用して double を String に変換したときと同じ結果にはならない。同じ結果を得るには、static valueOf(double)
メソッドを使用する
val
- BigDecimal に変換する double 値
NumberFormatException
- val が 無限か NaN である場合public BigDecimal(double val, MathContext mc)
このコンストラクタの結果は予想外である可能性があるため、一般的に使用はお勧めしません。 BigDecimal(double)
コンストラクタの注を参照してください。
val
- BigDecimal に変換する double 値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、RoundingMode が UNNECESSARY の場合
NumberFormatException
- val が 無限か NaN である場合public BigDecimal(BigInteger val)
val
- BigDecimal に変換する BigInteger 値public BigDecimal(BigInteger val, MathContext mc)
val
- BigDecimal に変換する BigInteger 値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal(BigInteger unscaledVal, int scale)
unscaledVal
- BigDecimal のスケールなしの値scale
- BigDecimal のスケールpublic BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
unscaledVal
- BigDecimal のスケールなしの値scale
- BigDecimal のスケールmc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal(int val)
val
- BigDecimal に変換する int 値public BigDecimal(int val, MathContext mc)
val
- BigDecimal に変換する int 値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal(long val)
val
- BigDecimal に変換する long 値public BigDecimal(long val, MathContext mc)
val
- BigDecimal に変換する long 値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合メソッドの詳細 |
---|
public static BigDecimal valueOf(long unscaledVal, int scale)
unscaledVal
- BigDecimal のスケールなしの値scale
- BigDecimal のスケール
public static BigDecimal valueOf(long val)
val
- BigDecimal の値
public static BigDecimal valueOf(double val)
val
- BigDecimal に変換する double
NumberFormatException
- val が 無限か NaN である場合public BigDecimal add(BigDecimal augend)
augend
- この BigDecimal に加算する値
public BigDecimal add(BigDecimal augend, MathContext mc)
augend
- この BigDecimal に加算する値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal subtract(BigDecimal subtrahend)
subtrahend
- この BigDecimal から減算する値
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
subtrahend
- この BigDecimal から減算する値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal multiply(BigDecimal multiplicand)
multiplicand
- この BigDecimal で乗算する値
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
multiplicand
- この BigDecimal で乗算する値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
このレガシーメソッドよりも、新しい divide(BigDecimal, int, RoundingMode)
メソッドを使用してください。
divisor
- この BigDecimal を除算する値scale
- 返される BigDecimal の商のスケールroundingMode
- 適用する丸めモード
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)
divisor
- この BigDecimal を除算する値scale
- 返される BigDecimal の商のスケールroundingMode
- 適用する丸めモード
ArithmeticException
- divisor が 0 で、roundingMode==RoundingMode.UNNECESSARY であり、指定したスケールが除算の結果を正確に表すには十分でない場合public BigDecimal divide(BigDecimal divisor, int roundingMode)
このレガシーメソッドよりも、新しい divide(BigDecimal, RoundingMode)
メソッドを使用してください。
divisor
- この BigDecimal を除算する値roundingMode
- 適用する丸めモード
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)
divisor
- この BigDecimal を除算する値roundingMode
- 適用する丸めモード
ArithmeticException
- divisor==0 である場合、または roundingMode==RoundingMode.UNNECESSARY であり、this.scale() が除算の結果を正確に表すには十分でない場合public BigDecimal divide(BigDecimal divisor)
divisor
- この BigDecimal を除算する値
ArithmeticException
- 正確な商の小数点以下が無限である場合public BigDecimal divide(BigDecimal divisor, MathContext mc)
divisor
- この BigDecimal を除算する値mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY または mc.precision == 0 で、かつ商の小数点以下が無限である場合public BigDecimal divideToIntegralValue(BigDecimal divisor)
(this.scale() - divisor.scale())
です。
divisor
- この BigDecimal を除算する値
ArithmeticException
- divisor==0 である場合public BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
(this.scale() - divisor.scale())
です。正確な商の整数部に mc.precision よりも多くの桁が必要な場合、ArithmeticException がスローされます。
divisor
- この BigDecimal を除算する値mc
- 使用するコンテキスト
ArithmeticException
- divisor==0 である場合
ArithmeticException
- mc.precision が 0 より大きく、結果に mc.precision よりも桁数の多い精度が必要な場合public BigDecimal remainder(BigDecimal divisor)
剰余は this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) によって提供されます。これはモジュロ演算ではない (負の結果が可能) であることに留意してください。
divisor
- この BigDecimal を除算する値
ArithmeticException
- divisor==0 である場合public BigDecimal remainder(BigDecimal divisor, MathContext mc)
剰余は this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) によって提供されます。これはモジュロ演算ではない (負の結果が可能) であることに留意してください。
divisor
- この BigDecimal を除算する値mc
- 使用するコンテキスト
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 メソッドと remainder メソッドを別々に使用するより、除算を 1 回だけ実行すればよいこのメソッドの方が高速であることに留意してください。
divisor
- この BigDecimal を除算する値、および計算された剰余
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 メソッドと remainder メソッドを別々に使用するより、除算を 1 回だけ実行すればよいこのメソッドの方が高速であることに留意してください。
divisor
- この BigDecimal を除算する値、および計算された剰余mc
- 使用するコンテキスト
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)
パラメータ n は、0 から 999999999 の範囲に収まっている必要があります。ZERO.pow(0) は ONE
を返します。
将来のリリースでは、このメソッドの指数の許容範囲が拡張される可能性があります。
n
- この BigDecimal の累乗
ArithmeticException
- n が範囲外にある場合public BigDecimal pow(int n, MathContext mc)
X3.274-1996 アルゴリズムは、次のとおりです。
ONE
が返される。
n
- この BigDecimal の累乗mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合、または n が範囲外である場合public BigDecimal abs()
public BigDecimal abs(MathContext mc)
mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal negate()
public BigDecimal negate(MathContext mc)
mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合public BigDecimal plus()
この BigDecimal を単に返すだけのこのメソッドは、単項マイナスメソッド negate()
の対称として含まれています。
negate()
public BigDecimal plus(MathContext mc)
このメソッドの効果は、round(MathContext)
メソッドの効果と同じです。
mc
- 使用するコンテキスト
ArithmeticException
- 結果が正確でなく、丸めモードが UNNECESSARY の場合round(MathContext)
public int signum()
public int scale()
public int precision()
0 の精度は 1 です。
public BigInteger unscaledValue()
public BigDecimal round(MathContext mc)
このメソッドの結果は、plus(MathContext)
メソッドの結果と同じです。
mc
- 使用するコンテキスト
ArithmeticException
- 丸めモードが UNNECESSARY で、BigDecimal 演算に丸めが必要な場合plus(MathContext)
public BigDecimal setScale(int newScale, RoundingMode roundingMode)
newScale
- 返される BigDecimal の値のスケールroundingMode
- 適用する丸めモード
ArithmeticException
- roundingMode==UNNECESSARY であり、指定したスケール演算で丸めが必要な場合RoundingMode
public BigDecimal setScale(int newScale, int roundingMode)
BigDecimal オブジェクトは不変であるため、setX メソッドでフィールド X を変更する通常の規則とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールを持つオブジェクトを返します。 返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
このレガシーメソッドよりも、新しい setScale(int, RoundingMode)
メソッドを使用してください。
newScale
- 返される BigDecimal の値のスケールroundingMode
- 適用する丸めモード
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 の存在が保証されます。値を変更することなく再スケーリングを行うのに十分な 0 が BigDecimalの小数部 (その整数値における 10 の因数) の最後にあることを呼び出し側が認識している場合、この呼び出しはスケールの縮小にも使用できます。
このメソッドは setScale の 2 つの引数を使うバージョンと同じ結果を返しますが、丸めを指定する必要のない場合に、呼び出し側は指定する手間を省くことができます。
BigDecimal オブジェクトは不変であるため、setX メソッドでフィールド X を変更する通常の規則とは対照的に、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale は適切なスケールを持つオブジェクトを返します。 返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
newScale
- 返される BigDecimal の値のスケール
ArithmeticException
- 指定したスケール演算で丸めが必要な場合setScale(int, int)
,
setScale(int, RoundingMode)
public BigDecimal movePointLeft(int n)
n
- 小数点を左へ移動する桁数
ArithmeticException
- スケールがオーバーフローする場合public BigDecimal movePointRight(int n)
n
- 小数点を右へ移動する桁数
ArithmeticException
- スケールがオーバーフローする場合public BigDecimal scaleByPowerOfTen(int n)
ArithmeticException
- スケールが 32 ビット整数の範囲外である場合public BigDecimal stripTrailingZeros()
public int compareTo(BigDecimal val)
Comparable<BigDecimal>
内の compareTo
val
- この BigDecimal と比較する BigDecimal
public boolean equals(Object x)
compareTo
と違い、このメソッドは、2 つの BigDecimal オブジェクトが値もスケールも同じである場合にだけ等しいと見なします (したがって、このメソッドでは 2.0 と 2.00 は等しくない)。
Object
内の equals
x
- この BigDecimal と比較する Object
compareTo(java.math.BigDecimal)
,
hashCode()
public BigDecimal min(BigDecimal val)
val
- 最小値の計算に使用する値
compareTo
メソッドで定義されている比較方法で値が等しい場合は、this が返されるcompareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
val
- 最大値の計算に使用する値
compareTo
メソッドで定義されている比較方法で値が等しい場合は、this が返されるcompareTo(java.math.BigDecimal)
public int hashCode()
Object
内の hashCode
equals(Object)
public String toString()
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(String)
コンストラクタを使用してその文字列表現を BigDecimal に戻すと、元の値が復元される
NumberFormat
クラスとそのサブクラスによって処理される
toEngineeringString()
メソッドを、BigDecimal の丸めには小数点以下の桁数が既知である setScale
メソッドを、それぞれ使用できる
Object
内の toString
Character.forDigit(int, int)
,
BigDecimal(java.lang.String)
public String toEngineeringString()
toString()
メソッドで記述されているように、BigDecimal を表す文字列を返します。 ただし、指数表現が使用される場合、0 でない値の整数部が 1 〜 999 の範囲に収まるように、10 の累乗は 3 の倍数 (技術表記法) に調整されます。 値 0 について指数表現が使用される場合、値 0 のスケールを維持するために小数点と 1 つまたは 2 つの小数部の桁が使用されます。toString()
の出力と違い、このメソッドの出力では、文字列コンストラクタを使用して出力文字列を BigDecimal に戻したときに、BigDecimal の同じ [integer, scale] ペアの復元は保証されないことに注意してください。このメソッドの結果は、文字列コンストラクタをメソッドの出力に適用した結果と等価な数値を常に生成するという弱い制約を満たします。
public String toPlainString()
toString()
,
toEngineeringString()
public BigInteger toBigInteger()
変換が正確でない (つまり、0 以外の小数部が破棄される) 場合に例外をスローするには、toBigIntegerExact()
メソッドを使用してください。
public BigInteger toBigIntegerExact()
ArithmeticException
- this が 0 以外の小数部を持つ場合public long longValue()
Number
内の longValue
public long longValueExact()
ArithmeticException
- this が 0 以外の小数部を持つ、または long 内に収まらない場合public int intValue()
Number
内の intValue
public int intValueExact()
ArithmeticException
- this が 0 以外の小数部を持つ、または int 内に収まらない場合public short shortValueExact()
ArithmeticException
- this が 0 以外の小数部を持つ場合、または short 内に収まらない場合public byte byteValueExact()
ArithmeticException
- this が 0 以外の小数部を持つ、または byte 内に収まらない場合public float floatValue()
Float.NEGATIVE_INFINITY
または Float.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。
Number
内の floatValue
public double doubleValue()
Double.NEGATIVE_INFINITY
または Double.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。
Number
内の doubleValue
public BigDecimal ulp()
this
と同じスケールで格納され、0 および 0 以外の値の結果は [1, this.scale()]
と等しくなります。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。