BigDecimal クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
変更できない、任意の有効桁数の符号付き 10 進数。
[Android.Runtime.Register("java/math/BigDecimal", DoNotGenerateAcw=true)]
public class BigDecimal : Java.Lang.Number, IDisposable, Java.Lang.IComparable
[<Android.Runtime.Register("java/math/BigDecimal", DoNotGenerateAcw=true)>]
type BigDecimal = class
inherit Number
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface IComparable
- 継承
- 属性
- 実装
注釈
変更できない、任意の有効桁数の符号付き 10 進数。
BigDecimalは、任意の有効桁数整数 #unscaledValue() 非スケーリング値と 32 ビット整数 #scale() スケールで構成されます。 ゼロまたは正の場合、小数点以下桁数は小数点の右側の桁数です。 負の場合、数値のスケーリングされていない値に、スケールの否定の累乗に 10 が乗算されます。 したがって、 BigDecimal で表される数値の値は (unscaledValue × 10<sup>-scale</sup>)。
BigDecimal クラスは、算術、スケール操作、丸め、比較、ハッシュ、および書式変換の操作を提供します。
#toStringメソッドは、BigDecimalの正規表現を提供します。
BigDecimal クラスを使用すると、ユーザーは丸め動作を完全に制御できます。 丸めモードが指定されておらず、正確な結果を表すことができない場合は、 ArithmeticException がスローされます。それ以外の場合は、演算に適切な MathContext オブジェクトを指定することで、選択した精度と丸めモードに計算を実行できます。 いずれの場合も、丸めを制御するために 8 <em>rounding モード</em> が提供されます。 丸めモードを表すためにこのクラスの整数フィールド ( #ROUND_HALF_UP など) を使用することは非推奨です。代わりに、 RoundingModeenumの列挙値 ( RoundingMode#HALF_UP など) を使用する必要があります。
MathContext オブジェクトに 0 (たとえば、MathContext#UNLIMITED) の精度設定が指定されている場合、算術演算は、MathContext オブジェクトを受け取たない算術メソッドと同様に正確です。 正確な結果を計算する場合、精度が 0 の MathContext オブジェクトの丸めモード設定は使用されないため、無関係です。 除算の場合、正確な商は無限に長い10進数の拡張を持つことができます。たとえば、1 を 3 で除算します。 商に非終端の 10 進拡張があり、正確な結果を返す演算が指定されている場合は、 ArithmeticException がスローされます。 それ以外の場合は、他の操作の場合と同様に、除算の正確な結果が返されます。
精度設定が 0 でない場合、 BigDecimal 算術の規則は、ANSI X3.274-1996 および ANSI X3.274-1996/AM 1-2000 (セクション 7.4) で定義されている算術演算の選択モードと広く互換性があります。 これらの標準とは異なり、 BigDecimal には多くの丸めモードが含まれています。 これらの ANSI 標準と BigDecimal 仕様の間の競合は、 BigDecimalを優先して解決されます。
同じ数値は異なる表現 (スケールが異なる) を持つ可能性があるため、算術と丸めの規則では、数値の結果と結果の表現で使用されるスケールの両方を指定する必要があります。
同じ数値の異なる表現は、同じ コーホートのメンバーと呼ばれます。
BigDecimal の #compareTo(BigDecimal) 自然な順序では、同じコーホートのメンバーが互いに等しいと見なされます。 これに対し、 #equals(Object) equals メソッドでは、等価性を保持するために、数値と表現の両方が同じである必要があります。
#scale()や#unscaledValue()などのメソッドの結果は、表現が異なる数値が等しい場合に異なります。
一般に、丸めモードと有効桁数の設定によって、正確な結果の桁数が返される桁数よりも多い場合 (除算と平方根の場合は無限に多い場合) に、限られた桁数で結果が返される方法が決まります。
最初に、返す合計桁数は、 MathContextの precision 設定によって指定されます。これにより、結果の 有効桁数が決まります。 数字の数は、正確な結果の左端の 0 以外の数字から始まります。 丸めモードは、破棄された末尾の数字が返された結果にどのように影響するかを決定します。
すべての算術演算子に対して、操作は、正確な中間結果が最初に計算された後、選択した丸めモードを使用して、精度設定で指定された桁数に丸められた (必要な場合) ように実行されます。 正確な結果が返されない場合、正確な結果の一部の桁位置は破棄されます。 丸めによって返される結果の大きさが大きくなると、先頭の "9" 桁に伝達されるキャリングによって新しい桁の位置が作成される可能性があります。 たとえば、値 999.9 を 3 桁に丸めると、数値は 100> と表される 1,000 に等しくなります。10<sup>1</sup>。 このような場合、新しい "1" は返される結果の先頭桁の位置です。
MathContext パラメーターを持つメソッドとコンストラクターの場合、結果が正しくありませんが、丸めモードがRoundingMode#UNNECESSARY UNNECESSARY場合、ArithmeticExceptionがスローされます。
論理的な正確な結果に加えて、各算術演算には、結果を表す適切なスケールがあります。 各操作に推奨されるスケールを次の表に示します。
<table class="striped" style="text-align:left"><caption>算術演算 </caption><thead><tr><th scope="col">Operation</th><th scope="col">Preferred Scale of Result</th ></tr></thead><tbody><tr><th scope="row">Add</th><td>max(addend.scale(), augend.scale())</td><tr><th scope="row">Subtract</th><td>max(minuend.scale(),subtrahend.scale())</td><tr><th scope="row" >Multiply</th><td>multiplier.scale() + multiplicand.scale()</td><tr><th scope="row ">Divide</th><td>dividend.scale() - divisor.scale()</td><tr><th scope="row">Square root</th><td>radicand.scale()/2</td></tbody></table>
これらのスケールは、正確な算術結果を返すメソッドで使用されるスケールです。ただし、正確な結果の桁数が多い場合があるため、正確な除算ではより大きな小数点以下桁数を使用する必要があります。 たとえば、1/32 は 0.03125 です。
丸める前に、論理的な正確な中間結果のスケールが、その操作に適したスケールになります。 正確な数値の結果を precision 桁で表すことができない場合、丸めでは返される一連の数字が選択され、結果のスケールは中間結果のスケールから、実際に返される precision 桁を表すことができる最小の小数点以下桁数に縮小されます。 正確な結果を最大 precision 桁で表すことができる場合は、優先スケールに最も近い小数点以下桁数で結果の表現が返されます。 特に、正確に表現可能な商は、末尾のゼロを削除してスケールを小さくすることで、 precision 桁未満で表される場合があります。 たとえば、RoundingMode#FLOOR 床丸めモードを使用して 3 桁に丸める場合、 <br>
19/100 = 0.19 // integer=19, scale=2
<br>
but<br>
21/110 = 0.190 // integer=190, scale=3
<br>
加算、減算、乗算の場合、スケールの減少は破棄される正確な結果の桁位置の数と等しくなります。 丸めによって、改行伝達によって新しい高位桁の位置が作成される場合、新しい桁位置が作成されない場合よりも、結果の追加の桁が破棄されます。
他の方法では、丸めセマンティクスが若干異なる場合があります。 たとえば、#pow(int, MathContext) 指定されたアルゴリズムを使用する pow メソッドの結果は、最後の場所の 1 つの #ulp() ulp で複数の単位で丸められた数学結果と異なる場合があります。
BigDecimalのスケールを操作するには、スケーリング/丸め操作と小数点モーション操作の 2 種類の操作が用意されています。 スケーリング/丸め操作 (#setScale setScale および #round round) は、値がオペランドの値とほぼ (または正確に) 等しいが、スケールまたは有効桁数が指定された値である BigDecimal を返します。つまり、格納されている数値の精度は、その値に与える影響を最小限に抑えながら増減します。 小数点の動き操作 (#movePointLeft movePointLeft および #movePointRight movePointRight) は、指定した方向に小数点を指定した距離に移動することによってオペランドから作成された BigDecimal を返します。
32 ビット整数として、スケールの値のセットは大きくなりますが、境界付けされます。 結果のスケールがオーバーフローまたはアンダーフローによって 32 ビット整数の範囲を超える場合、操作は ArithmeticExceptionをスローする可能性があります。
簡潔でわかりやすくするために、擬似コードは BigDecimal メソッドの説明全体で使用されます。 擬似コード式(i + j)は、「BigDecimalBigDecimalの値に追加されたiBigDecimalの値を持つj」の短縮形です。 擬似コード式(i == j)は、"trueBigDecimalがiBigDecimalと同じ値を表す場合にのみj" の短縮形です。 その他の擬似コード式も同様に解釈されます。 角かっこは、BigInteger値を定義する特定のBigDecimalとスケールのペアを表すために使用されます。たとえば、[19, 2]は、小数点以下桁数が 2 の 0.19 に等しいBigDecimalです。
このクラスのすべてのメソッドとコンストラクターは、任意の入力パラメーターのNullPointerException オブジェクト参照を渡したときにnullをスローします。
1.1 で追加されました。
このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。
コンストラクター
| 名前 | 説明 |
|---|---|
| BigDecimal(BigInteger, Int32, MathContext) |
スケールされていない |
| BigDecimal(BigInteger, Int32) |
スケーリングされていない |
| BigDecimal(BigInteger, MathContext) |
コンテキスト設定に従って、 |
| BigDecimal(BigInteger) |
|
| BigDecimal(Char[], Int32, Int32, MathContext) |
|
| BigDecimal(Char[], Int32, Int32) |
サブ配列の指定を許可しながら、 |
| BigDecimal(Char[], MathContext) |
|
| BigDecimal(Char[]) |
|
| BigDecimal(Double, MathContext) |
コンテキストの設定に従って丸めを使用して、 |
| BigDecimal(Double) |
|
| BigDecimal(Int32, MathContext) |
コンテキストの設定に従って丸めを使用して、 |
| BigDecimal(Int32) |
|
| BigDecimal(Int64, MathContext) |
コンテキストの設定に従って丸めを使用して、 |
| BigDecimal(Int64) |
|
| BigDecimal(IntPtr, JniHandleOwnership) |
JNI オブジェクトのマネージド表現を作成するときに使用されるコンストラクター。ランタイムによって呼び出されます。 |
| BigDecimal(String, MathContext) |
|
| BigDecimal(String) |
|
フィールド
| 名前 | 説明 |
|---|---|
| RoundCeiling |
正の無限大に向かって丸める丸めモード。 |
| RoundDown |
0 に向かって丸める丸めモード。 |
| RoundFloor |
負の無限大に向かって丸める丸めモード。 |
| RoundHalfDown |
両方のネイバーが等しい場合を除き、"最も近い近隣" に向かって丸める丸めモード。その場合は切り捨て。 |
| RoundHalfEven |
両方のネイバーが等しい場合を除き、"最も近い隣人" に向かって丸める丸めモード。その場合は、偶数の近隣に向かって丸める。 |
| RoundHalfUp |
両方のネイバーが等しい場合を除き、"最も近い近隣" に向かって丸める丸めモード。その場合は切り上げ。 |
| RoundUnnecessary |
要求された操作に正確な結果があることをアサートする丸めモード。そのため、丸める必要はありません。 |
| RoundUp |
0 から丸める丸めモード。 |
プロパティ
| 名前 | 説明 |
|---|---|
| Class |
この |
| Handle |
基になる Android インスタンスへのハンドル。 (継承元 Object) |
| JniIdentityHashCode |
相互運用ランタイムによってこのJava ピアに割り当てられた ID ハッシュ コードを取得します。 (継承元 Object) |
| JniManagedPeerState |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| JniPeerMembers |
この型の JNI ピア メンバーを取得します。 |
| One |
小数点以下桁数が 0 の値 1。 |
| PeerReference |
このJava ピアの JNI オブジェクト参照を取得します。 (継承元 Object) |
| Ten |
小数点以下桁数が 0 の値 10。 |
| ThresholdClass |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
| ThresholdType |
この API は Android 用 Mono インフラストラクチャをサポートしており、コードから直接使用するためのものではありません。 |
| Zero |
小数点以下桁数が 0 の値 0。 |
メソッド
| 名前 | 説明 |
|---|---|
| Abs() |
値がこの |
| Abs(MathContext) |
この |
| Add(BigDecimal, MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Add(BigDecimal) |
値が |
| ByteValue() |
指定した数値の値を |
| ByteValueExact() |
この |
| Clone() |
このオブジェクトのコピーを作成して返します。 (継承元 Object) |
| CompareTo(BigDecimal) |
この |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| Dispose() |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| Dispose(Boolean) |
このJava ピアによって保持されているリソースを解放します。 (継承元 Object) |
| DisposeUnlessReferenced() |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| Divide(BigDecimal, Int32, RoundingMode) |
値が |
| Divide(BigDecimal, Int32, RoundOptions) |
値が |
| Divide(BigDecimal, MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Divide(BigDecimal, RoundingMode) |
値が |
| Divide(BigDecimal, RoundOptions) |
値が |
| Divide(BigDecimal) |
値が |
| DivideAndRemainder(BigDecimal, MathContext) |
|
| DivideAndRemainder(BigDecimal) |
|
| DivideToIntegralValue(BigDecimal, MathContext) |
値が |
| DivideToIntegralValue(BigDecimal) |
値が商の整数部分である |
| DoubleValue() |
この |
| Equals(Object) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| Equals(Object) |
他のオブジェクトがこのオブジェクトと "等しい" かどうかを示します。 (継承元 Object) |
| FloatValue() |
この |
| GetHashCode() |
オブジェクトのハッシュ コード値を返します。 (継承元 Object) |
| IntValue() |
この |
| IntValueExact() |
この |
| JavaFinalize() |
オブジェクトへの参照がなくなったとガベージ コレクションによって判断されたときに、オブジェクトのガベージ コレクターによって呼び出されます。 (継承元 Object) |
| LongValue() |
この |
| LongValueExact() |
この |
| Max(BigDecimal) |
この |
| Min(BigDecimal) |
この |
| MovePointLeft(Int32) |
小数点が左 |
| MovePointRight(Int32) |
小数点が右 |
| Multiply(BigDecimal, MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Multiply(BigDecimal) |
値が |
| Negate() |
値が |
| Negate(MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Notify() |
このオブジェクトのモニターで待機している 1 つのスレッドを起動します。 (継承元 Object) |
| NotifyAll() |
このオブジェクトのモニターで待機しているすべてのスレッドを起動します。 (継承元 Object) |
| Plus() |
値が |
| Plus(MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Pow(Int32, MathContext) |
値が |
| Pow(Int32) |
値が |
| Precision() |
このの |
| Remainder(BigDecimal, MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Remainder(BigDecimal) |
値が |
| Round(MathContext) |
|
| Scale() |
このの |
| ScaleByPowerOfTen(Int32) |
数値が ( |
| SetHandle(IntPtr, JniHandleOwnership) |
Handle プロパティを設定します。 (継承元 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| SetScale(Int32, RoundingMode) |
スケールが指定された値であり、そのスケールされていない値がこの |
| SetScale(Int32, RoundOptions) |
スケールが指定された値であり、そのスケールされていない値がこの |
| SetScale(Int32) |
スケールが指定された値であり、その値がこの |
| ShortValue() |
指定した数値の値を |
| ShortValueExact() |
この |
| Signum() |
この |
| Sqrt(MathContext) |
コンテキスト設定に従って丸めを使用して、 |
| StripTrailingZeros() |
この値と数値が等しいが、後続のゼロが表現から削除された |
| Subtract(BigDecimal, MathContext) |
コンテキスト設定に従って丸め処理を行い、値が |
| Subtract(BigDecimal) |
値が |
| ToArray<T>() |
このJava配列ラッパーからマネージド配列を作成します。 (継承元 Object) |
| ToBigInteger() |
この |
| ToBigIntegerExact() |
この |
| ToEngineeringString() |
指数が必要な場合は、エンジニアリング表記を使用して、この |
| ToPlainString() |
指数フィールドを使用せずに、この |
| ToString() |
オブジェクトの文字列形式を返します。 (継承元 Object) |
| Ulp() |
この |
| UnregisterFromRuntime() |
相互運用ランタイムからこのJava ピアの登録を解除します。 (継承元 Object) |
| UnscaledValue() |
この |
| ValueOf(Double) |
|
| ValueOf(Int64, Int32) |
スケーリングされていない |
| ValueOf(Int64) |
|
| Wait() |
現在のスレッドが起動するまで待機します。通常は、 <em>notified</em> または <em>interrupted</em>。 (継承元 Object) |
| Wait(Int64, Int32) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
| Wait(Int64) |
現在のスレッドは、通常、 <em>notified</em> または <em>interrupted</em>、または一定のリアルタイムが経過するまで、起動されるまで待機します。 (継承元 Object) |
明示的なインターフェイスの実装
| 名前 | 説明 |
|---|---|
| IComparable.CompareTo(Object) |
この値を指定したオブジェクトと比較します。 |
| IJavaPeerable.Disposed() |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.Finalized() |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
変更できない、任意の有効桁数の符号付き 10 進数。 (継承元 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
変更できない、任意の有効桁数の符号付き 10 進数。 |
拡張メソッド
| 名前 | 説明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
インスタンス |
| JavaAs<TResult>(IJavaPeerable) |
|
| JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
| JavaCast<TResult>(IJavaObject) |
変更できない、任意の有効桁数の符号付き 10 進数。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
|