BigDecimal 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
不可變、任意有效位數的帶正負號十進位數。
[Android.Runtime.Register("java/math/BigDecimal", DoNotGenerateAcw=true)]
public class BigDecimal : Java.Lang.Number, IDisposable, Java.Interop.IJavaPeerable, 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
- 繼承
- 屬性
- 實作
備註
不可變、任意有效位數的帶正負號十進位數。 BigDecimal
由任意有效位數整數 #unscaledValue () 未調整值和 32 位整數 #scale () 小數位數所組成。 如果為零或正數,小數點右邊的小數字數為位數。 如果為負數,則數位的未調整值乘以十到小數字數負數的乘冪。 因此(unscaledValue × 10<sup>-scale</sup>)
, 所BigDecimal
表示的數字值是 。
類別 BigDecimal
提供算術、小數位數操作、四捨五入、比較、哈希和格式轉換的作業。 方法#toString
提供 標準表示。BigDecimal
類別 BigDecimal
可讓使用者完全控制捨入行為。 如果未指定進位模式且無法表示確切的結果,則會擲回 ; ArithmeticException
否則,計算可以透過提供適當的 MathContext
物件給作業,以執行至所選的有效位數和四捨五入模式。 不論是哪一種情況,都提供八 <個 em>四捨五入模式</em> ,以用於四捨五入的控件。 使用此類別中的整數位段 (例如 #ROUND_HALF_UP
) 表示進位模式已被取代;應改用 () 之類的 RoundingMode#HALF_UP
列舉值RoundingMode
enum
。
MathContext
當物件提供精確度設定為0 (時,例如, MathContext#UNLIMITED
) 、算術運算是確切的,如同沒有MathContext
物件的算術方法一樣。 計算確切結果時,不會使用有效位數設定為0的物件四捨五入模式設定 MathContext
,因此不相關。 在除法的情況下,確切的商數可能會有無限長的小數展開;例如,1 除以 3。 如果商具有不確定的小數展開,而且指定作業以傳回確切的結果, ArithmeticException
則會擲回 。 否則,會傳回除法的確切結果,如其他作業所完成。
當精確度設定不是 0 時,算術規則 BigDecimal
與 ANSI X3.274-1996 和 ANSI X3.274-1996/AM 1-2000 區段 7.4) (第 7.4 節所定義的算術運算模式廣泛相容。 不同於這些標準, BigDecimal
包括許多四捨五入模式。 這些 ANSI 標準與 BigDecimal
規格之間的任何衝突都已解決,以取代 BigDecimal
。
由於相同的數值可以有不同的表示法, (不同的刻度) ,因此算術和捨入的規則必須同時指定數值結果和結果表示中使用的小數位數。
相同數值的不同表示法稱為相同 世代的成員。 #compareTo (BigDecimal) 自然順序 BigDecimal
會將相同世代的成員視為彼此相等。 相反地, #equals(Object) equals
方法需要數值和表示法都相同,才能保留相等。 和 等#scale()
#unscaledValue()
方法的結果會因為具有不同表示法的數值相等而有所不同。
一般而言,四捨五入模式和有效位數設定會決定當確切結果的位數超過傳回位數數目時,作業如何傳回結果, (在除法和平方根) 的情況下,可能會無限多。
首先,要傳回的數字總數是由 MathContext
的 precision
設定所指定;這會決定結果的有效 位數。 數字計數會從確切結果的最左邊非零位數開始。 捨入模式會決定任何捨棄的尾端數位如何影響傳回的結果。
針對所有算術運算符,作業會執行,就像是先計算確切的中繼結果,然後使用選取的四捨五入模式,將精確度設定所指定的位數四捨五入 () 。 如果未傳回確切的結果,則會捨棄確切結果的某些位數位置。 四捨五入會增加傳回結果的大小時,可以藉由傳播至前置 「9」 位數來建立新的數位位置。 例如,四捨五入值 999.9 到三位數四捨五入會等於一千,以 100&次表示;10<sup>1</sup>。 在這種情況下,新的 「1」 是傳回結果的前置數位位置。
如果是具有 MathContext
參數的方法和建構函式,如果結果不相交,但四捨五入模式為 RoundingMode#UNNECESSARY UNNECESSARY
, ArithmeticException
則會擲回 。
除了邏輯確切的結果之外,每個算術運算都有代表結果的慣用小數字數。 下表列出每個作業的慣用規模。
<table class=“striped” style=“text-align:left”標題 Preferred Scales for Arithmetic Operations </標題<> thead><tr><th scope=“col”Operation</><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 四捨五入模式四捨五入為三位數, <br>
19/100 = 0.19 // integer=19, scale=2
<Br>
但<br>
21/110 = 0.190 // integer=190, scale=3
<Br>
請注意,針對加、減和乘,小數位數的縮減會等於捨棄之確切結果的數位位置數目。 如果捨入會導致攜帶傳播建立新的高序數位位置,則會捨棄結果的額外位數,而不是建立新的數位位置時。
其他方法的四捨五入語意可能稍有不同。 例如,使用 #pow (int、MathContext) 指定演算法的方法結果 pow
偶爾可能會因為最後一個位置中的一個 #ulp () ulp,而四捨五入的數學結果可能會有所不同。
提供兩種類型的作業來操作 : BigDecimal
縮放/四捨五入作業和小數點動作作業。 縮放/捨入作業 (#setScale setScale
和 #round round
) 傳回 BigDecimal
,其值大約 (或完全) 等於操作數的作業,但其小數位數或精確度為指定值;也就是說,它們會增加或減少預存數位的有效位數,並對其值的影響最小。 小數點動作作業 (#movePointLeft movePointLeft
和 #movePointRight movePointRight
) 傳回 BigDecimal
從操作數建立的 ,方法是移動指定方向的指定距離小數點。
做為32位整數,小數字數的一組值很大,但有界限。 如果結果的刻度會超過 32 位整數的範圍,則溢位或下溢時,作業可能會擲回 ArithmeticException
。
為了簡潔明瞭,虛擬程式代碼會在整個方法的描述 BigDecimal
中使用。 虛擬程式代碼表示式是「BigDecimal
,其值為BigDecimal
i
加入至 的BigDecimal
j
。(i + j)
虛擬程式代碼表達式是 「true
如果 ,而且只有在 表示與 相同的j
BigDecimal
值時BigDecimal
i
,才為 」的縮寫。(i == j)
其他虛擬程式代碼表達式的解譯方式類似。 方括弧用來表示定義BigDecimal
值的特定BigInteger
和小數字數位;例如 [19, 2] 是BigDecimal
數值等於0.19,其小數位數為2。
傳遞任何輸入參數的對象參考時,null
這個類別的所有方法和建構函式都會擲NullPointerException
回。
已在1.1中新增。
此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。
建構函式
BigDecimal(BigInteger) |
將 |
BigDecimal(BigInteger, Int32) |
將 |
BigDecimal(BigInteger, Int32, MathContext) |
根據 |
BigDecimal(BigInteger, MathContext) |
|
BigDecimal(Char[]) |
將的 |
BigDecimal(Char[], Int32, Int32) |
將的 |
BigDecimal(Char[], Int32, Int32, MathContext) |
將的 |
BigDecimal(Char[], MathContext) |
將的 |
BigDecimal(Double) |
將 |
BigDecimal(Double, MathContext) |
將 |
BigDecimal(Int32) |
將 |
BigDecimal(Int32, MathContext) |
將 |
BigDecimal(Int64) |
將 |
BigDecimal(Int64, MathContext) |
將 |
BigDecimal(IntPtr, JniHandleOwnership) |
建立 JNI 物件的 Managed 表示法時使用的建構函式;由運行時間呼叫。 |
BigDecimal(String) |
將字 |
BigDecimal(String, MathContext) |
將的 |
欄位
RoundCeiling |
四捨五入模式,以四捨五入為正無限大。 |
RoundDown |
四捨五入模式,以四捨五入為零。 |
RoundFloor |
四捨五入模式,以四捨五入為負無限大。 |
RoundHalfDown |
除非兩個芳鄰都相等,否則四捨五入模式會四捨五入至「近鄰」,在此情況下會進位。 |
RoundHalfEven |
除非兩個芳鄰都相等,否則四捨五入模式會四捨五入至「近鄰」,在此情況下,會四捨五入至偶鄰。 |
RoundHalfUp |
除非兩個芳鄰相等,否則四捨五入模式會四捨五入至「近鄰」,在此情況下會四捨五入。 |
RoundUnnecessary |
四捨五入模式可判斷要求作業有確切的結果,因此不需要四捨五入。 |
RoundUp |
四捨五入模式,以捨棄零。 |
屬性
Class |
傳回這個 |
Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
JniIdentityHashCode |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
JniPeerMembers |
不可變、任意有效位數的帶正負號十進位數。 |
One |
值為 1,小數位數為 0。 |
PeerReference |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
Ten |
值為 10,小數位數為 0。 |
ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
Zero |
值為 0,小數位數為 0。 |
方法
Abs() |
傳回 , |
Abs(MathContext) |
傳回 , |
Add(BigDecimal) |
|
Add(BigDecimal, MathContext) |
傳回其值為 |
ByteValue() |
傳回指定數字的值做為 |
ByteValueExact() |
將這個 |
Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
CompareTo(BigDecimal) |
將這個 |
Dispose() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
Dispose(Boolean) |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
Divide(BigDecimal) |
|
Divide(BigDecimal, Int32, RoundingMode) |
傳 |
Divide(BigDecimal, Int32, RoundOptions) |
傳 |
Divide(BigDecimal, MathContext) |
傳回其值為 |
Divide(BigDecimal, RoundingMode) |
|
Divide(BigDecimal, RoundOptions) |
|
DivideAndRemainder(BigDecimal) |
傳回兩個項目 |
DivideAndRemainder(BigDecimal, MathContext) |
傳回兩個元素 |
DivideToIntegralValue(BigDecimal) |
傳回 , |
DivideToIntegralValue(BigDecimal, MathContext) |
傳回 , |
DoubleValue() |
將這個 |
Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
FloatValue() |
將這個 |
GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
IntValue() |
轉換這個 |
IntValueExact() |
將這個 |
JavaFinalize() |
當垃圾收集判斷物件不再參考物件時,垃圾收集行程會在物件上呼叫。 (繼承來源 Object) |
LongValue() |
將這個 |
LongValueExact() |
將這個 |
Max(BigDecimal) |
傳回這個 |
Min(BigDecimal) |
傳回這個 |
MovePointLeft(Int32) |
傳回 , |
MovePointRight(Int32) |
傳回 , |
Multiply(BigDecimal) |
|
Multiply(BigDecimal, MathContext) |
傳回其值為 |
Negate() |
|
Negate(MathContext) |
傳回其值為 |
Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
Plus() |
|
Plus(MathContext) |
傳回其值為 |
Pow(Int32) |
傳 |
Pow(Int32, MathContext) |
|
Precision() |
傳回這個 |
Remainder(BigDecimal) |
|
Remainder(BigDecimal, MathContext) |
傳回其值為 |
Round(MathContext) |
|
Scale() |
傳回這個 |
ScaleByPowerOfTen(Int32) |
傳回 BigDecimal,其數值等於 ( |
SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
SetScale(Int32) |
傳回其 |
SetScale(Int32, RoundingMode) |
|
SetScale(Int32, RoundOptions) |
|
ShortValue() |
傳回指定數字的值做為 |
ShortValueExact() |
將這個 |
Signum() |
傳回這個 |
Sqrt(MathContext) |
傳回 的平方根 |
StripTrailingZeros() |
|
Subtract(BigDecimal) |
|
Subtract(BigDecimal, MathContext) |
傳回其值為 |
ToArray<T>() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
ToBigInteger() |
將這個 |
ToBigIntegerExact() |
將此 |
ToEngineeringString() |
如果需要指數,則傳回這個 |
ToPlainString() |
傳回不含指數欄位之這個 |
ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
Ulp() |
傳回此 |
UnregisterFromRuntime() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
UnscaledValue() |
傳回 , |
ValueOf(Double) |
|
ValueOf(Int64) |
將 |
ValueOf(Int64, Int32) |
將 |
Wait() |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>。>< (繼承來源 Object) |
Wait(Int64) |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>,或直到經過一定數量的實時為止。<> (繼承來源 Object) |
Wait(Int64, Int32) |
讓目前的線程等到喚醒為止,通常是em <notified/em>或<em>interrupted</em>,或直到經過一定數量的實時為止。<> (繼承來源 Object) |
明確介面實作
IComparable.CompareTo(Object) |
不可變、任意有效位數的帶正負號十進位數。 |
IJavaPeerable.Disposed() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.DisposeUnlessReferenced() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.Finalized() |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.JniManagedPeerState |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
不可變、任意有效位數的帶正負號十進位數。 (繼承來源 Object) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
不可變、任意有效位數的帶正負號十進位數。 |
GetJniTypeName(IJavaPeerable) |
不可變、任意有效位數的帶正負號十進位數。 |