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() 小數位數所組成。 如果為零或正數,小數字數是小數點右邊的位數。 如果為負數,則數位的未調整值會乘以 10 到小數位數否定的乘冪。 因此(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 節)。 與這些標準不同, 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”caption Arithmetic Operations <結果的慣用尺規 /caption<>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>><multiplyr.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 四捨五入模式 <,四捨五入為三位數>
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)
虛擬程式代碼表達式(i == j)
的縮寫為 「true
if,且只有在 表示與j
BigDecimal
相同的值時BigDecimal
i
。 其他虛擬程式代碼表達式會以類似的方式解譯。 方括弧是用來代表定義BigDecimal
值的特定BigInteger
尺規組;例如 [19, 2] 是BigDecimal
數值等於0.19,其小數位數為2。
傳遞任何輸入參數的對象參考時,這個類別的所有方法和建構函式都會擲null
回NullPointerException
。
已在1.1中新增。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
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,其數值等於 (* 10<sup n</sup>>)。 |
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) |
不可變的任意有效位數帶正負號的十進位數。 |