|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.Number java.math.BigDecimal
public class BigDecimal
変更が不可能な、任意精度の符号付き小数です。BigDecimal は、任意精度の「スケールなしの整数値」と、小数点以下の桁数を表す負ではない 32 ビット整数の「スケール」で構成されます。BigDecimal で表される数値は (unscaledValue/10scale) です。BigDecimal クラスは、基本算術、スケール操作、比較、ハッシング、および書式変換の演算を提供します。
BigDecimal クラスでは、小数部を破棄できる演算 (divide(BigDecimal, int)
、divide(BigDecimal, int, int)
、および setScale(int, int)
) に対する「丸め動作」をユーザーは明示的に指定しなければならず、ユーザーが丸め動作を完全に制御することになります。8 種類の「丸めモード」が用意されています。
BigDecimal のスケール操作には、スケーリング/丸め演算と小数点移動演算の 2 種類があります。スケーリング/丸め演算 (setScale) は、値がオペランドの値とほぼ (またはちょうど) 等しく、指定されたスケール値を持つ BigDecimal を返します。この演算では、値に対する影響を最小限にとどめながら、数値の精度を増減させます。小数点移動演算 (movePointLeft(int)
と movePointRight(int)
) は、指定した方向に指定した桁だけ小数点を移動することにより作成される BigDecimal を返します。この演算では、数値の精度は影響を受けず、数値が変化します。
説明をわかりやすく簡潔にするために、BigDecimal メソッドの説明では全体を通して擬似コードを使用します。擬似コード式 (i + j) は、「値が BigDecimal i の値と BigDecimal j の値の和である BigDecimal」を示します。擬似コード式 (i == j) は、「BigDecimal i が BigDecimal j と同じ値を表す場合にだけ true であること」を示します。ほかの擬似コード式も同じように解釈されます。
注:BigDecimal を SortedMap
のキーまたは SortedSet
の要素として使用する場合は、注意してください。BigDecimal の「自然順序付け」が「equals と矛盾する」からです。詳細は、Comparable
、SortedMap
、または SortedSet
を参照してください。
このクラスのメソッドおよびコンストラクタはすべて、入力パラメータに対して null オブジェクト参照が渡されると NullPointerException
をスローします。
BigInteger
,
SortedMap
,
SortedSet
,
直列化された形式フィールドの概要 | |
---|---|
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 から離れるように丸めるモードです。 |
コンストラクタの概要 | |
---|---|
BigDecimal(BigInteger val)
BigInteger を BigDecimal に変換します。 |
|
BigDecimal(BigInteger unscaledVal,
int scale)
BigInteger のスケールなしの値と int のスケールを BigDecimal に変換します。 |
|
BigDecimal(double val)
double を BigDecimal に変換します。 |
|
BigDecimal(String val)
BigDecimal の文字列表現を BigDecimal に変換します。 |
メソッドの概要 | |
---|---|
BigDecimal |
abs()
値がこの BigDecimal の絶対値でスケールが this.scale() である BigDecimal を返します。 |
BigDecimal |
add(BigDecimal val)
値が (this + val) でスケールが max(this.scale(), val.scale()) である BigDecimal を返します。 |
int |
compareTo(BigDecimal val)
この BigDecimal と指定された BigDecimal を比較します。 |
int |
compareTo(Object o)
この BigDecimal と指定された Object を比較します。 |
BigDecimal |
divide(BigDecimal val,
int roundingMode)
値が (this / val) でスケールが this.scale() である BigDecimal を返します。 |
BigDecimal |
divide(BigDecimal val,
int scale,
int roundingMode)
値が (this / val) で、スケールが指定されたものである BigDecimal を返します。 |
double |
doubleValue()
この BigDecimal を double に変換します。 |
boolean |
equals(Object x)
この BigDecimal と指定された Object が等しいかどうかを比較します。 |
float |
floatValue()
この BigDecimal を float に変換します。 |
int |
hashCode()
この BigDecimal のハッシュコードを返します。 |
int |
intValue()
この BigDecimal を int に変換します。 |
long |
longValue()
この BigDecimal を long に変換します。 |
BigDecimal |
max(BigDecimal val)
この BigDecimal と val の最大値を返します。 |
BigDecimal |
min(BigDecimal val)
この BigDecimal と val の最小値を返します。 |
BigDecimal |
movePointLeft(int n)
この BigDecimal の小数点を n 桁左へ移動したものに等しい BigDecimal を返します。 |
BigDecimal |
movePointRight(int n)
指定された桁数だけ小数点を右へ移動します。 |
BigDecimal |
multiply(BigDecimal val)
値が (this * val) でスケールが (this.scale() + val.scale()) である BigDecimal を返します。 |
BigDecimal |
negate()
値が (-this) でスケールが this.scale() である BigDecimal を返します。 |
int |
scale()
この BigDecimal の「スケール」を返します。 |
BigDecimal |
setScale(int scale)
スケールが指定された値であり、値がこの BigDecimal と同じ数値である、BigDecimalを返します。 |
BigDecimal |
setScale(int scale,
int roundingMode)
指定したスケールを持ち、スケールなしの値として、元の BigDecimal のスケールなしの値を、全体の値を変えないように適当な 10 の累乗で乗じた (あるいは割った) 値を持つ BigDecimal を返します。 |
int |
signum()
この BigDecimal の符号要素を返します。 |
BigDecimal |
subtract(BigDecimal val)
値が (this - val) でスケールが max(this.scale(), val.scale()) である BigDecimal を返します。 |
BigInteger |
toBigInteger()
この BigDecimal を BigInteger に変換します。 |
String |
toString()
この BigDecimal の文字列表現を返します。 |
BigInteger |
unscaledValue()
値がこの BigDecimal の「スケールなしの値」である BigInteger を返します。 |
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 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(String val)
小数部は、小数点と 0 桁以上の 10 進数字で構成されます。この文字列では、整数部または小数部が少なくとも 1 桁は必要です。符号、整数部、小数部からなる数字は「有効数字」と呼ばれます。
指数は、「e」(「\u0075」) または「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) になります。ただし、指数部の指定があれば補正されます。文字列に指数がある場合、スケールから指数が減算されます。その結果スケールが負となる場合、返される BigDecimal のスケールは 0 となり、スケールなしの数値に適切な 10 の累乗が乗算されます。これにより、どの場合にも結果の BigDecimal は significand × 10exponent と等しくなります。将来、この仕様が負のスケールを許容するように修正される場合は、スケールを 0 にしてスケールなしの値を調整するという最後の手順はなくなるでしょう。
文字から数字へのマッピングは Character.digit(char, int)
で提供され、基数 10 への変換に設定されます。String には、不適切な文字 (空白など) を含めることはできません。
注:float および double の NaN、および ±Infinity 以外の値では、このコンストラクタは Float.toString(float)
および Double.toString(double)
で返される値と互換性があります。この方法では、BigDecimal(double)
コンストラクタで予測ができないことによる影響を受けないため、float または double を BigDecimal に変換する望ましい方法です。
注:Release 1.3 以降では、先頭のプラス記号および末尾の指数を任意で付けることができるようになりました。
val
- BigDecimal の文字列表現
NumberFormatException
- val が BigDecimal の表現として無効である場合public BigDecimal(double val)
double
を BigDecimal に変換します。BigDecimal のスケールは、(10scale * val) が整数となるような最小の値です。 注:このコンストラクタの結果は予想外である可能性があります。new BigDecimal(.1) は正確に .1 と等しいと思うかもしれませんが、実際には .1000000000000000055511151231257827021181583404541015625 と等しくなります。これは .1 を double (または有限長 2 進小数) として正確に表現できないためです。したがって、表記に関わらず、コンストラクタに渡される long 値は正確に .1 と等しいわけではありません。
一方、(String) コンストラクタは完全に予測可能です。new BigDecimal(".1") は、「正確に」 .1 と等しくなります。そのため、通常は、このコンストラクタの代わりに (String) コンストラクタを使用することをお勧めします。
val
- BigDecimal に変換する double
値
NumberFormatException
- val が 無限か NaN である場合は valpublic BigDecimal(BigInteger val)
val
- BigDecimal に変換する BigInteger 値public BigDecimal(BigInteger unscaledVal, int scale)
int
のスケールを BigDecimal に変換します。BigDecimal の値は (unscaledVal/10scale) です。
unscaledVal
- BigDecimal のスケールなしの値scale
- BigDecimal のスケール
NumberFormatException
- スケールが負の場合メソッドの詳細 |
---|
public static BigDecimal valueOf(long unscaledVal, int scale)
long
のスケールなしの値と int
のスケールを BigDecimal に変換します。この「static ファクトリメソッド」は、よく使われる BigDecimal 値の再利用を可能にするため、(long
, int
) コンストラクタよりも優先して提供されます。
unscaledVal
- BigDecimal のスケールなしの値scale
- BigDecimal のスケール
public static BigDecimal valueOf(long val)
long
値をスケールが 0 の BigDecimal に変換します。この「static ファクトリメソッド」は、よく使われる BigDecimal 値の再利用を可能にするため、(long
) コンストラクタよりも優先して提供されます。
val
- BigDecimal の値
public BigDecimal add(BigDecimal val)
val
- この BigDecimal に加算する値
public BigDecimal subtract(BigDecimal val)
val
- この BigDecimal から減算する値
public BigDecimal multiply(BigDecimal val)
val
- この BigDecimal で乗算する値
public BigDecimal divide(BigDecimal val, int scale, int roundingMode)
val
- この BigDecimal を除算する値scale
- 返される BigDecimal の商のスケールroundingMode
- 適用する丸めモード
ArithmeticException
- val が 0 であるか、scale が負である場合。あるいは 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 val, int roundingMode)
val
- この BigDecimal を除算する値roundingMode
- 適用する丸めモード
ArithmeticException
- val==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 abs()
public BigDecimal negate()
public int signum()
public int scale()
public BigInteger unscaledValue()
public BigDecimal setScale(int scale, int roundingMode)
BigDecimal オブジェクトは不変であるため、setX
メソッドでフィールド X
を変更する通常の規則とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale
は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
scale
- 返される BigDecimal の値のスケールroundingMode
- 適用する丸めモード
ArithmeticException
- scale が負である場合。あるいは 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 scale)
このメソッドは setScale の 2 つの引数を使うバージョンと同じ結果を返しますが、呼び出し側は、丸めモードを不必要に指定する手間を省くことができます。
BigDecimal オブジェクトは不変であるため、setX
メソッドでフィールド X
を変更する通常の規則とは異なり、このメソッドを呼び出しても元のオブジェクトは変更されないことに注意してください。代わりに、setScale
は適切なスケールを持つオブジェクトを返します。返されたオブジェクトは、新しく割り当てられる場合とそうでない場合があります。
scale
- 返される BigDecimal の値のスケール
ArithmeticException
- scale が負である場合。あるいは指定したスケール演算で丸めが必要な場合setScale(int, int)
public BigDecimal movePointLeft(int n)
n
- 小数点を左へ移動する桁数
public BigDecimal movePointRight(int n)
n
- 小数点を右へ移動する桁数
public int compareTo(BigDecimal val)
val
- この BigDecimal と比較する BigDecimal
public int compareTo(Object o)
compareTo
と同じように動作します。そうでない場合は ClassCastException をスローします。これは、BigDecimal の比較は BigDecimal 同士でしか行えないためです。
Comparable
内の compareTo
o
- この BigDecimal と比較する Object
ClassCastException
- o が BigDecimal ではない場合compareTo(java.math.BigDecimal)
,
Comparable
public boolean equals(Object x)
compareTo
と違い、このメソッドは、2 つの BigDecimal が値もスケールも同じである場合にだけ等しいとみなします。したがって、このメソッドでは 2.0 と 2.00 は等しくありません。
Object
内の equals
x
- この BigDecimal と比較する Object
compareTo(java.math.BigDecimal)
public BigDecimal min(BigDecimal val)
val
- 最小値の計算に使用する値
compareTo
メソッドで定義されている比較方法で値が等しい場合は、どちらかが返されるcompareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
val
- 最大値の計算に使用する値
compareTo
メソッドで定義されている比較方法で値が等しい場合は、どちらかが返されるcompareTo(java.math.BigDecimal)
public int hashCode()
Object
内の hashCode
Object.equals(java.lang.Object)
,
Hashtable
public String toString()
Character.forDigit(int, int)
による数字から文字へのマッピングが使用されます。先頭のマイナス記号は符号を示すために使用され、小数点以下の桁数はスケールを示すために使用されます。この表現は (String) コンストラクタと互換性があります。
Object
内の toString
Character.forDigit(int, int)
,
BigDecimal(java.lang.String)
public BigInteger toBigInteger()
double
から long
への「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。
public int intValue()
int
に変換します。この変換は、『Java 言語仕様』で定義された double
から short
への「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。結果の「BigInteger」が長すぎて int
内に収まらない場合、下位 32 ビットだけが返されます。この変換により、この BigDecimal 値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。
Number
内の intValue
int
に変換されたこの BigDecimalpublic long longValue()
long
に変換します。この変換は、『Java 言語仕様』で定義された double
から short
への「ナロープリミティブ変換」と同様です。この BigDecimal の小数部はすべて破棄されます。結果の「BigInteger」が長すぎて long
内に収まらない場合、下位 64 ビットだけが返されます。この変換により、この BigDecimal 値の絶対値と精度全体に関する情報が失われ、逆の符号で返される可能性があります。
Number
内の longValue
long
に変換されたこの BigDecimalpublic float floatValue()
float
に変換します。この変換は、『Java 言語仕様』で定義された double
から float
への「ナロープリミティブ変換」と同様です。この BigDecimal の絶対値が大きすぎて float
として表現できない場合、適宜 Float.NEGATIVE_INFINITY
または Float.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。
Number
内の floatValue
float
に変換されたこの BigDecimalpublic double doubleValue()
double
に変換します。この変換は、『Java 言語仕様』で定義された double
から float
への「ナロープリミティブ変換」と同様です。この BigDecimal の絶対値が大きすぎて double
として表現できない場合、適宜 Double.NEGATIVE_INFINITY
または Double.POSITIVE_INFINITY
に変換されます。戻り値が有限である場合も、この変換により、BigDecimal 値の精度に関する情報が失われる可能性があります。
Number
内の doubleValue
double
に変換されたこの BigDecimal
|
Foundation 1.1.2 | |||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。