BigDecimal 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
不變、任意精確的帶號十進位數。
[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
- 繼承
- 屬性
- 實作
備註
不變、任意精確的帶號十進位數。 A BigDecimal 由任意精度整數 #unscaledValue() 未調整的值 與一個 32 位元整數 #scale() 刻度組成。 如果是零或正,刻度是小數點右側的數字數。 若為負,則該數值未調整的值乘以十乘以刻度否定的冪次方。 因此BigDecimal,由 所(unscaledValue × 10<sup>-scale</sup>)代表的數字值為 。
該 BigDecimal 類別提供算術運算、尺度操作、四捨五入、比較、雜湊及格式轉換等操作。 此 #toString 方法提供了 的典範表示 BigDecimal。
這個 BigDecimal 類別讓使用者完全控制四捨五入的行為。 若未指定捨入模式且無法精確表示結果,則拋出 a ArithmeticException ;否則,可透過提供適當的 MathContext 物件來執行計算,以選擇的精度與捨入模式進行計算。 無論哪種情況,都提供八<種 em>四捨五入模式<>來控制四捨五入。 使用此類整數域(例如 #ROUND_HALF_UP)來表示捨棄模式;應改用 的列舉值 RoundingModeenum(如 RoundingMode#HALF_UP)。
當 MathContext 物件被提供精確度為 0(例如, MathContext#UNLIMITED),算術運算是精確的,而不取 MathContext 物件的算術方法也是如此。 作為計算精確結果的推論,物體的四捨五入模式 MathContext 設定為0時不被使用,因此無關緊要。 在除法的情況下,正商可以有無限長的十進位展開;例如,1除以3。 若商展開為非終止十進位展開,且操作指定為返回精確結果,則拋出 a ArithmeticException 。 否則,除法的精確結果會回傳,與其他操作相同。
當精度設定非 0 時,算術規則 BigDecimal 大致與 ANSI X3.274-1996 及 ANSI X3.274-1996/AM 1-2000(第 7.4 節)中定義的部分運算模式相容。 與這些標準不同,這裡 BigDecimal 包含許多四捨五入模式。 這些 ANSI 標準與 BigDecimal 規範之間的衝突,將以 為 為優先 BigDecimal權解決。
由於同一數值可能有不同的表示法(不同的刻度),算術和四捨五入的規則必須同時指定數值結果與結果表示所用的刻度。
相同數值的不同表示稱為同一 群體的成員。 #compareTo(大十進制)自然序 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<算術運算>結果的偏好刻度 /caption<>thead<>tr<th scope=“col”><運算>/th<scope =“col”>< 結果的首選刻度>/th</tr><>/tbody<>tbody<>tr<scope = “row”>< Add>/th<td><max(addend.scale(), augend.scale())/>td<>tr<th scope = “row”>< 減法>/th td<max(minuend.scale(), subtrahend.scale()/><td><tr>th scope=“row”< 乘法></th>td<multiplier.scale() + multiplicand.scale()/><td><tr>th scope=“row”< 除法></th>td<dividend.scale() - 除數.scale()></td><tr>th scope=“row”<平方根></th>td<radicand.scale()/2></td></tbody></table><>
這些刻度是回傳精確算術結果的方法所使用的刻度;但精確除法可能必須使用較大的刻度,因為精確結果可能有更多位數。 例如,1/32 是 0.03125。
在四捨五入之前,邏輯精確中間結果的尺度是該運算的首選尺度。 若無法以數字表示 precision 精確的數字結果,四捨五入選擇要回傳的數字集合,並將結果的比例從中間結果的比例縮小到能代表實際回傳數字 precision 的最小比例。 如果精確結果最多只能用 precision 位數表示,則回傳最接近偏好刻度的結果表示。 特別地,精確可表示的商數可以透過去除尾隨零並減少刻度來用少 precision 於數字表示。 例如,使用 RoundingMode#FLOOR floor rounding mode( <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和 )會將小數點沿指定方向移動指定距離,從操作數返回 a BigDecimal 。
作為 32 位元整數,刻度的值集合很大,但有界。 若結果的尺度超過32位元整數的範圍,無論是溢位或下溢,操作可能會拋出 ArithmeticException。
為了簡潔與清晰,方法描述中多使用 BigDecimal 偽代碼。 偽代碼表達(i + j)式是「BigDecimal一個值與BigDecimali相加於 的 BigDecimalj的」的簡稱。 偽碼表達 (i == j) 式是「true 當且僅當 代表 BigDecimali 與 相同的值 BigDecimalj」的簡稱。 其他偽代碼表達式也有類似的解讀方式。 方括號用來表示 BigInteger 定義某個 BigDecimal 值的特定與刻度對;例如,[19, 2] 是 BigDecimal 數值上等於 0.19,且刻度為 2。
此類別的所有方法與建構子在傳遞NullPointerException物件參考時都會拋出null。
在 1.1 版本中加入。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
建構函式
| 名稱 | Description |
|---|---|
| BigDecimal(BigInteger, Int32, MathContext) |
將 |
| BigDecimal(BigInteger, Int32) |
將 |
| BigDecimal(BigInteger, MathContext) |
根據上下文設定,將 a |
| BigDecimal(BigInteger) |
將 a |
| BigDecimal(Char[], Int32, Int32, MathContext) |
將 的 |
| BigDecimal(Char[], Int32, Int32) |
將 的 |
| BigDecimal(Char[], MathContext) |
將 的 |
| BigDecimal(Char[]) |
將 的 |
| BigDecimal(Double, MathContext) |
將 a |
| BigDecimal(Double) |
將 a |
| BigDecimal(Int32, MathContext) |
將 轉換為 |
| BigDecimal(Int32) |
將 a |
| BigDecimal(Int64, MathContext) |
將 a |
| BigDecimal(Int64) |
將 a |
| BigDecimal(IntPtr, JniHandleOwnership) |
用於建立 JNI 物件受管理表示的建構器;由執行時呼叫。 |
| BigDecimal(String, MathContext) |
將 的 |
| BigDecimal(String) |
將 的 |
欄位
| 名稱 | Description |
|---|---|
| RoundCeiling |
將四捨五入模式轉為向正無限大四捨五入。 |
| RoundDown |
將四捨五入模式調整至零。 |
| RoundFloor |
將四捨五入模式轉為向負無限大四捨五入。 |
| RoundHalfDown |
將四捨五入模式移至「最近鄰」,除非兩個鄰居距離相等,此時取整。 |
| RoundHalfEven |
將捨入模式將四捨五入至「最近鄰」,除非兩個鄰居距離相等,此時則向偶鄰取整。 |
| RoundHalfUp |
將四捨五入模式取入到「最近鄰」,除非兩個鄰居距離相等,此時取整。 |
| RoundUnnecessary |
捨入模式以斷言所請求的運算結果精確,因此不需要四捨五入。 |
| RoundUp |
四捨五入模式從零開始四捨五入。 |
屬性
| 名稱 | Description |
|---|---|
| Class |
傳回這個 |
| Handle |
基礎Android實例的句柄。 (繼承來源 Object) |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| JniPeerMembers |
這類人能獲得JNI同儕會員。 |
| One |
值為 1,刻度為 0。 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| Ten |
值為 10,刻度為 0。 |
| ThresholdClass |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| ThresholdType |
此 API 支援適用於 Android 的 Mono 基礎結構,並不適合直接從您的程式代碼使用。 |
| Zero |
值為0,刻度為0。 |
方法
| 名稱 | Description |
|---|---|
| Abs() |
回傳 |
| Abs(MathContext) |
回傳 a |
| Add(BigDecimal, MathContext) |
回傳 |
| Add(BigDecimal) |
回傳 |
| ByteValue() |
回傳指定數字的值為 |
| ByteValueExact() |
將此 |
| Clone() |
建立並傳回這個 對象的複本。 (繼承來源 Object) |
| CompareTo(BigDecimal) |
將此 |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| Dispose() |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| Dispose(Boolean) |
釋放該 Java 節點所持有的資源。 (繼承來源 Object) |
| DisposeUnlessReferenced() |
不變、任意精確的帶號十進位數。 (繼承來源 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) |
回傳 a |
| DivideToIntegralValue(BigDecimal) |
回傳 a |
| DoubleValue() |
將這個 |
| Equals(Object) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| Equals(Object) |
指出其他物件是否「等於」這個物件。 (繼承來源 Object) |
| FloatValue() |
將這個 |
| GetHashCode() |
傳回此物件的雜湊碼值。 (繼承來源 Object) |
| IntValue() |
將此 |
| IntValueExact() |
將此 |
| JavaFinalize() |
已淘汰.
當垃圾收集決定不再參考物件時,垃圾收集行程在 物件上呼叫。 (繼承來源 Object) |
| LongValue() |
將這個 |
| LongValueExact() |
將此 |
| Max(BigDecimal) |
回傳此 |
| Min(BigDecimal) |
返回此 |
| MovePointLeft(Int32) |
回傳 a |
| MovePointRight(Int32) |
回傳 a |
| Multiply(BigDecimal, MathContext) |
回傳 |
| Multiply(BigDecimal) |
回傳 |
| Negate() |
回傳 |
| Negate(MathContext) |
回傳 |
| Notify() |
喚醒正在等候此物件監視器的單一線程。 (繼承來源 Object) |
| NotifyAll() |
喚醒正在等候此物件監視器的所有線程。 (繼承來源 Object) |
| Plus() |
回傳 |
| Plus(MathContext) |
回傳 |
| Pow(Int32, MathContext) |
回傳 一個 |
| Pow(Int32) |
回傳 |
| Precision() |
返回此 |
| Remainder(BigDecimal, MathContext) |
回傳 |
| Remainder(BigDecimal) |
回傳 一個 |
| Round(MathContext) |
根據設定 |
| Scale() |
回傳這個 |
| ScaleByPowerOfTen(Int32) |
回傳一個 BigDecimal,其數值等於 ( |
| SetHandle(IntPtr, JniHandleOwnership) |
設定 Handle 屬性。 (繼承來源 Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| SetScale(Int32, RoundingMode) |
回傳 a |
| SetScale(Int32, RoundOptions) |
回傳 a |
| SetScale(Int32) |
回傳 A |
| ShortValue() |
回傳指定數字的值為 |
| ShortValueExact() |
將此 |
| Signum() |
回傳此函 |
| Sqrt(MathContext) |
回傳一個近似到平方根 |
| StripTrailingZeros() |
回傳 a |
| Subtract(BigDecimal, MathContext) |
回傳 |
| Subtract(BigDecimal) |
回傳 |
| ToArray<T>() |
從這個 Java 陣列包裝器建立一個受管理陣列。 (繼承來源 Object) |
| ToBigInteger() |
將這個 |
| ToBigIntegerExact() |
將此 |
| ToEngineeringString() |
若需要指數,則回傳此符號 |
| ToPlainString() |
回傳一個無指數域的字串表示 |
| ToString() |
傳回物件的字串表示。 (繼承來源 Object) |
| Ulp() |
回傳 ULP 大小,即 在最後一個單位。 |
| UnregisterFromRuntime() |
將此 Java 節點從互通執行時中取消註冊。 (繼承來源 Object) |
| UnscaledValue() |
回傳 的 a |
| 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) |
明確介面實作
| 名稱 | Description |
|---|---|
| IComparable.CompareTo(Object) |
將此值與指定物件比較。 |
| IJavaPeerable.Disposed() |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
不變、任意精確的帶號十進位數。 (繼承來源 JavaObject) |
| IJavaPeerable.UnregisterFromRuntime() |
不變、任意精確的帶號十進位數。 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
不變、任意精確的帶號十進位數。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |