|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.lang.Number java.math.BigDecimal
public class BigDecimal
不可變的、任意精度的有符號十進制數。BigDecimal 由任意精度的整數非標度值 和 32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次方。因此,BigDecimal 表示的數值是 (unscaledValue × 10-scale)。
BigDecimal 類別提供以下操作:算術、標度操作、捨入、比較、雜湊演算法和格式轉換。toString()
方法提供 BigDecimal 的規範表示形式。
BigDecimal 類別使使用者能完全控制捨入行為。如果未指定捨入網要,並且無法表示準確結果,則拋出一個異常;否則,通過向該操作提供適當的 MathContext
物件,可以對已選擇的精度和捨入網要執行計算。在任何情況下,可以為捨入控制提供八種捨入網要。使用此類別(例如,ROUND_HALF_UP
)中的整數欄位來表示捨入網要已過時;應改為使用 RoundingMode enum(例如,RoundingMode.HALF_UP
)的列舉值。
當為 MathContext 物件提供 0 的精度設置(例如,MathContext.UNLIMITED
)時,算術運算是準確的,它們是不採用任何 MathContext 物件的算術方法。(這是第 5 版之前的版本支持的唯一行為。)為了計算準確結果,不使用附帶 0 精度設置的 MathContext 物件的捨入網要設置,因此與該物件無關。在除法中,準確的商可能是一個無限長的十進制擴展;例如,1 除以 3 所得的商。如果商具有無窮的十進制擴展,但是指定了該操作返回準確結果,則拋出 ArithmeticException。否則,像其他操作那樣,返回除法運算的準確結果。
當精度設置不為 0 時,BigDecimal 演算法的規則完全符合 ANSI X3.274-1996 和 ANSI X3.274-1996/AM 1-2000( 7.4 節)中定義的演算法的可選操作網要。與上述標準不同,BigDecimal 套件括多種捨入網要,它們對於版本 5 以前的 BigDecimal 版本中的除法是強制性的。這些 ANSI 標準和 BigDecimal 規範之間的任何衝突都按照有利於 BigDecimal 的方式進行解決。
由於同一數值可以有不同的表示形式(具有不同的標度),因此運算和捨入的規則必須同時指定數值結果和結果表示形式中所用的標度。
一般情況下,當準確結果(在除法中,可能有無限多位)比返回的數值具有更多位數時,捨入網要和精度設置確定操作如何返回具有有限位數的結果。 首先,MathContext 的 precision 設置指定要返回的總位數;這確定了結果的精度。位數計數從準確結果的最左邊的非零數字開始。捨入網要確定丟棄的尾部位數如何影響返回的結果。
對於所有算術運算符,運算的執行方式是,首先計算準確的中間結果,然後,使用選擇的捨入網要將其捨入為精度設置(如有必要)指定的位數。如果不返回準確結果,則將丟棄準確結果的某些數位。當捨入增加了返回結果的大小時,前導數字“9”的進位傳播可能會創建新的數位。例如,將值 999.9 捨入為三位數字,則在數值上等於一千,表示為 100×101。在這種情況下,新的 "1" 是返回結果的前導數位。
除了邏輯的準確結果外,每種算術運算都有一個表示結果的首選標度。下表列出了每個運算的首選標度。
運算 | 結果的首選標度 |
---|---|
加 | max(addend.scale(), augend.scale()) |
減 | max(minuend.scale(), subtrahend.scale()) |
乘 | multiplier.scale() + multiplicand.scale() |
除 | dividend.scale() - divisor.scale() |
捨入之前,邏輯的準確中間結果的標度是該運算的首選標度。如果用 precision
位數無法表示準確的數值結果,則捨入會選擇要返回的一組數字,並將該結果的標度從中間結果的標度減小到可以表示實際返回的 precision
位數的最小標度。如果準確結果可以使用最多 precision
個數字表示,則返回具有最接近首選標度的標度的結果表示形式。尤其是,通過移除結尾零並減少標度,可以用少於 precision
個數字來表示準確的可表示的商。例如,使用 floor 捨入網要將結果捨入為三個數字,
19/100 = 0.19 // integer=19, scale=2
但是
21/110 = 0.190 // integer=190, scale=3
注意,對於加、減和乘,標度的縮減量將等於丟棄的準確結果的數字位置數。如果捨入導致進位傳播創建一個新的高位,則當未創建新的數位時,會丟棄該結果的附加數字。
其他方法可能與捨入語義稍微不同。例如,使用指定的演算法的 pow 方法得到的結果可能偶爾不同於捨入得到的算術結果,如最後一位有多個單位(ulp)。
可以通過兩種型別的操作來處理 BigDecimal 的標度:標度/捨入操作和小數點移動操作。標度/捨入操作(setScale
和 round
)返回 BigDecimal,其值近似地(或精確地)等於操作數的值,但是其標度或精度是指定的值;即:它們會增加或減少對其值具有最小影響的存儲數的精度。小數點移動操作(movePointLeft
和 movePointRight
)返回從操作數創建的 BigDecimal,創建的方法是按指定方向將小數點移動一個指定距離。
為了簡潔明瞭起見,整個 BigDecimal 方法的描述中都使用了偽程式碼。偽程式碼表達式 (i + j) 是“其值為 BigDecimal i 加 BigDecimal j 的 BigDecimal”的簡寫。偽程式碼表達式 (i == j) 是“當且僅當 BigDecimal i 表示與 BigDecimal j 相同的值時,則為 true”的簡寫。可以類似地解釋其他偽程式碼表達式。方括號用於表示特定的 BigInteger 和定義 BigDecimal 值的標度對;例如,[19, 2] 表示 BigDecimal 在數值上等於 0.19,標度是 2。
註:如果 BigDecimal 物件用作 SortedMap
中的鍵或 SortedSet
中的元素,則應特別小心,因為 BigDecimal 的自然排序與 equals 方法不一致。有關更多資訊,請參見 Comparable
、SortedMap
或 SortedSet
。
當為任何輸入參數傳遞 null 物件參考時,此類別的所有方法和建構子都將拋出 NullPointerException。
BigInteger
,
MathContext
,
RoundingMode
,
SortedMap
,
SortedSet
,
序列化表格欄位摘要 | |
---|---|
static BigDecimal |
ONE
值為 1,標度為 0。 |
static int |
ROUND_CEILING
接近正無窮大的捨入網要。 |
static int |
ROUND_DOWN
接近零的捨入網要。 |
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
捨入遠離零的捨入網要。 |
static BigDecimal |
TEN
值為 10,標度為 0。 |
static BigDecimal |
ZERO
值為 0,標度為 0。 |
建構子摘要 | |
---|---|
BigDecimal(BigInteger val)
將 BigInteger 轉換為 BigDecimal。 |
|
BigDecimal(BigInteger unscaledVal,
int scale)
將 BigInteger 非標度值和 int 標度轉換為 BigDecimal。 |
|
BigDecimal(BigInteger unscaledVal,
int scale,
MathContext mc)
將 BigInteger 非標度值和 int 標度轉換為 BigDecimal(根據上下文設置進行捨入)。 |
|
BigDecimal(BigInteger val,
MathContext mc)
將 BigInteger 轉換為 BigDecimal(根據上下文設置進行捨入)。 |
|
BigDecimal(char[] in)
將 BigDecimal 的字元陣列表示形式轉換為 BigDecimal,接受與 BigDecimal(String) 建構子相同的字元序列。 |
|
BigDecimal(char[] in,
int offset,
int len)
將 BigDecimal 的字元陣列表示形式轉換為 BigDecimal,接受與 BigDecimal(String) 建構子相同的字元序列,同時允許指定子陣列。 |
|
BigDecimal(char[] in,
int offset,
int len,
MathContext mc)
將 BigDecimal 的字元陣列表示形式轉換為 BigDecimal,接受與 BigDecimal(String) 建構子相同的字元序列,同時允許指定子陣列,並根據上下文設置進行捨入。 |
|
BigDecimal(char[] in,
MathContext mc)
將 BigDecimal 的字元陣列表示形式轉換為 BigDecimal,接受與 BigDecimal(String) 建構子相同的字元序列(根據上下文設置進行捨入)。 |
|
BigDecimal(double val)
將 double 轉換為 BigDecimal,後者是 double 的二進制浮點值準確的十進製表示形式。 |
|
BigDecimal(double val,
MathContext mc)
將 double 轉換為 BigDecimal(根據上下文設置進行捨入)。 |
|
BigDecimal(int val)
將 int 轉換為 BigDecimal。 |
|
BigDecimal(int val,
MathContext mc)
將 int 轉換為 BigDecimal(根據上下文設置進行捨入)。 |
|
BigDecimal(long val)
將 long 轉換為 BigDecimal。 |
|
BigDecimal(long val,
MathContext mc)
將 long 轉換為 BigDecimal(根據上下文設置進行捨入)。 |
|
BigDecimal(String val)
將 BigDecimal 的字元串表示形式轉換為 BigDecimal。 |
|
BigDecimal(String val,
MathContext mc)
將 BigDecimal 的字元串表示形式轉換為 BigDecimal,接受與 BigDecimal(String) 建構子相同的字元串(按照上下文設置進行捨入)。 |
方法摘要 | |
---|---|
BigDecimal |
abs()
返回 BigDecimal,其值為此 BigDecimal 的絕對值,其標度為 this.scale()。 |
BigDecimal |
abs(MathContext mc)
返回其值為此 BigDecimal 絕對值的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
add(BigDecimal augend)
返回一個 BigDecimal,其值為 (this + augend),其標度為 max(this.scale(), augend.scale())。 |
BigDecimal |
add(BigDecimal augend,
MathContext mc)
返回其值為 (this + augend) 的 BigDecimal(根據上下文設置進行捨入)。 |
byte |
byteValueExact()
將此 BigDecimal 轉換為 byte,以檢查丟失的資訊。 |
int |
compareTo(BigDecimal val)
將此 BigDecimal 與指定的 BigDecimal 比較。 |
BigDecimal |
divide(BigDecimal divisor)
返回一個 BigDecimal,其值為 (this / divisor),其首選標度為 (this.scale() - divisor.scale());如果無法表示準確的商值(因為它有無窮的十進制擴展),則拋出 ArithmeticException。 |
BigDecimal |
divide(BigDecimal divisor,
int roundingMode)
返回一個 BigDecimal,其值為 (this / divisor),其標度為 this.scale()。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
int roundingMode)
返回一個 BigDecimal,其值為 (this / divisor),其標度為指定標度。 |
BigDecimal |
divide(BigDecimal divisor,
int scale,
RoundingMode roundingMode)
返回一個 BigDecimal,其值為 (this / divisor),其標度為指定標度。 |
BigDecimal |
divide(BigDecimal divisor,
MathContext mc)
返回其值為 (this / divisor) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
divide(BigDecimal divisor,
RoundingMode roundingMode)
返回一個 BigDecimal,其值為 (this / divisor),其標度為 this.scale()。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor)
返回由兩個元素組成的 BigDecimal 陣列,該陣列包含 divideToIntegralValue 的結果,後跟對兩個操作數計算所得到的 remainder。 |
BigDecimal[] |
divideAndRemainder(BigDecimal divisor,
MathContext mc)
返回由兩個元素組成的 BigDecimal 陣列,該陣列包含 divideToIntegralValue 的結果,後跟根據上下文設置對兩個操作數進行捨入計算所得到的 remainder 的結果。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor)
返回 BigDecimal,其值為向下捨入所得商值 (this / divisor) 的整數部分。 |
BigDecimal |
divideToIntegralValue(BigDecimal divisor,
MathContext mc)
返回 BigDecimal,其值為 (this / divisor) 的整數部分。 |
double |
doubleValue()
將此 BigDecimal 轉換為 double。 |
boolean |
equals(Object x)
比較此 BigDecimal 與指定的 Object 的相等性。 |
float |
floatValue()
將此 BigDecimal 轉換為 float。 |
int |
hashCode()
返回此 BigDecimal 的雜湊碼。 |
int |
intValue()
將此 BigDecimal 轉換為 int。 |
int |
intValueExact()
將此 BigDecimal 轉換為 int,以檢查丟失的資訊。 |
long |
longValue()
將此 BigDecimal 轉換為 long。 |
long |
longValueExact()
將此 BigDecimal 轉換為 long,以檢查丟失的資訊。 |
BigDecimal |
max(BigDecimal val)
返回此 BigDecimal 和 val 的最大值。 |
BigDecimal |
min(BigDecimal val)
返回此 BigDecimal 和 val 的最小值。 |
BigDecimal |
movePointLeft(int n)
返回一個 BigDecimal,它等效於將該值的小數點向左移動 n 位。 |
BigDecimal |
movePointRight(int n)
返回一個 BigDecimal,它等效於將該值的小數點向右移動 n 位。 |
BigDecimal |
multiply(BigDecimal multiplicand)
返回一個 BigDecimal,其值為 (this × multiplicand),其標度為 (this.scale() + multiplicand.scale())。 |
BigDecimal |
multiply(BigDecimal multiplicand,
MathContext mc)
返回其值為 (this × multiplicand) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
negate()
返回 BigDecimal,其值為 (-this),其標度為 this.scale()。 |
BigDecimal |
negate(MathContext mc)
返回其值為 (-this) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
plus()
返回 BigDecimal,其值為 (+this),其標度為 this.scale()。 |
BigDecimal |
plus(MathContext mc)
返回其值為 (+this) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
pow(int n)
返回其值為 (thisn) 的 BigDecimal,準確計算該冪,使其具有無限精度。 |
BigDecimal |
pow(int n,
MathContext mc)
返回其值為 (thisn) 的 BigDecimal。 |
int |
precision()
返回此 BigDecimal 的精度。 |
BigDecimal |
remainder(BigDecimal divisor)
返回其值為 (this % divisor) 的 BigDecimal。 |
BigDecimal |
remainder(BigDecimal divisor,
MathContext mc)
返回其值為 (this % divisor) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigDecimal |
round(MathContext mc)
返回根據 MathContext 設置進行捨入後的 BigDecimal。 |
int |
scale()
返回此 BigDecimal 的標度。 |
BigDecimal |
scaleByPowerOfTen(int n)
返回其數值等於 (this * 10n) 的 BigDecimal。 |
BigDecimal |
setScale(int newScale)
返回一個 BigDecimal,其標度為指定值,其值在數值上等於此 BigDecimal 的值。 |
BigDecimal |
setScale(int newScale,
int roundingMode)
返回一個 BigDecimal,其標度為指定值,其非標度值通過此 BigDecimal 的非標度值乘以或除以十的適當次方來確定,以維護其總值。 |
BigDecimal |
setScale(int newScale,
RoundingMode roundingMode)
返回 BigDecimal,其標度為指定值,其非標度值通過此 BigDecimal 的非標度值乘以或除以十的適當次方來確定,以維護其總值。 |
short |
shortValueExact()
將此 BigDecimal 轉換為 short,以檢查丟失的資訊。 |
int |
signum()
返回此 BigDecimal 的正負號函數。 |
BigDecimal |
stripTrailingZeros()
返回數值上等於此小數,但從該表示形式移除所有尾部零的 BigDecimal。 |
BigDecimal |
subtract(BigDecimal subtrahend)
返回一個 BigDecimal,其值為 (this - subtrahend),其標度為 max(this.scale(), subtrahend.scale())。 |
BigDecimal |
subtract(BigDecimal subtrahend,
MathContext mc)
返回其值為 (this - subtrahend) 的 BigDecimal(根據上下文設置進行捨入)。 |
BigInteger |
toBigInteger()
將此 BigDecimal 轉換為 BigInteger。 |
BigInteger |
toBigIntegerExact()
將此 BigDecimal 轉換為 BigInteger,以檢查丟失的資訊。 |
String |
toEngineeringString()
返回此 BigDecimal 的字元串表示形式,需要指數時,則使用工程計數法。 |
String |
toPlainString()
返回不帶指數欄位的此 BigDecimal 的字元串表示形式。 |
String |
toString()
返回此 BigDecimal 的字元串表示形式,如果需要指數,則使用科學記數法。 |
BigDecimal |
ulp()
返回此 BigDecimal 的 ulp(最後一位的單位)的大小。 |
BigInteger |
unscaledValue()
返回其值為此 BigDecimal 的非標度值 的 BigInteger。 |
static BigDecimal |
valueOf(double val)
使用 Double.toString(double) 方法提供的 double 規範的字元串表示形式將 double 轉換為 BigDecimal。 |
static BigDecimal |
valueOf(long val)
將 long 值轉換為具有零標度的 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 BigDecimal ZERO
public static final BigDecimal ONE
public static final BigDecimal TEN
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(char[] in, int offset, int len)
BigDecimal(String)
建構子相同的字元序列,同時允許指定子陣列。
注意,如果字元陣列中已經提供字元的序列,則使用此建構子要比將 char 陣列轉換為字元串並使用 BigDecimal(String) 建構子更快。
in
- 作為源字元的 char 陣列。offset
- 要檢查的陣列中的第一個字元。len
- 要考慮的字元數。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式,或者定義的子陣列不完全在 in 中。public BigDecimal(char[] in, int offset, int len, MathContext mc)
BigDecimal(String)
建構子相同的字元序列,同時允許指定子陣列,並根據上下文設置進行捨入。
注意,如果字元陣列中已經提供字元的序列,則使用此建構子要比將 char 陣列轉換為字元串並使用 BigDecimal(String) 建構子更快。
in
- 作為源字元的 char 陣列。offset
- 要檢查的陣列中的第一個字元。len
- 要考慮的字元數。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,且捨入網要為 UNNECESSARY。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式,或者定義的子陣列不完全在 in 中。public BigDecimal(char[] in)
BigDecimal(String)
建構子相同的字元序列。
注意,如果字元序列已經可以作為一個字元陣列使用,則使用此建構子要比將 char 陣列轉換為字元串並使用 BigDecimal(String) 建構子更快。
in
- 作為源字元的 char 陣列。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式。public BigDecimal(char[] in, MathContext mc)
BigDecimal(String)
建構子相同的字元序列(根據上下文設置進行捨入)。
注意,如果字元序列已經可以作為一個字元陣列使用,則使用此建構子要比將 char 陣列轉換為字元串並使用 BigDecimal(String) 建構子更快。
in
- 作為源字元的 char 陣列。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,且捨入網要為 UNNECESSARY。
NumberFormatException
- 如果 in 不是 BigDecimal 的有效表示形式。public BigDecimal(String val)
該小數由小數點以及後跟的零或更多十進制數字組成。字元串必須至少包含整數或小數部分中的一個數字。由符號、整數和小數部分組成的數字稱為有效位數。
指數由字元 'e'('\u0065') 或 'E' ('\u0045') 以及後跟的一個或多個十進制數字組成。指數的值必須位於 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:
- Digit
- Digits Digit
- Digit:
Character.isDigit(char)
對其返回 true 的任何字元,如 0、1、2……
返回的 BigDecimal 的標度將是小數部分中的數字位數,如果該字元串不包含小數點,則標度為零,這取決於對指數的調整;如果字元串包含一個指數,則從標度減去該指數。得到的標度值必須位於 Integer.MIN_VALUE 和 Integer.MAX_VALUE(包括)之間。
Character.digit(char, int)
集提供從字元到數字的映射,以轉換成進制 10。該字元串不能包含任何額外字元(例如,空白)。
範例:
返回的 BigDecimal 的值等於有效位數 × 10 指數。對於左邊的每個字元串,得到的表示形式 [BigInteger, scale] 顯示在右邊。
"0" [0,0] "0.00" [0,2] "123" [123,0] "-123" [-123,0] "1.23E3" [123,-1] "1.23E+3" [123,-1] "12.3E+7" [123,-6] "12.0" [120,1] "12.3" [123,1] "0.00123" [123,5] "-1.23E-12" [-123,14] "1234.5E-4" [12345,5] "0E+7" [0,-7] "-0" [0,0]
註:對於不是 float、double NaN 和 ±Infinity 的值,此建構子與 Float.toString(float)
和 Double.toString(double)
返回的值相容。這通常是將 float 或 double 轉換為 BigDecimal 的首選方法,因為它不會遇到 BigDecimal(double)
建構子的不可預知問題。
val
- BigDecimal 的字元串表示形式。
NumberFormatException
- 如果 val 不是 BigDecimal 的有效表示形式。public BigDecimal(String val, MathContext mc)
BigDecimal(String)
建構子相同的字元串(按照上下文設置進行捨入)。
val
- BigDecimal 的字元串表示形式。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,且捨入網要為 UNNECESSARY。
NumberFormatException
- 如果 val 不是 BigDecimal 的有效表示形式。public BigDecimal(double val)
註:
Double.toString(double)
方法,然後使用 BigDecimal(String)
建構子,將 double 轉換為 String。要獲取該結果,請使用 static valueOf(double)
方法。
val
- 要轉換為 BigDecimal 的 double 值。
NumberFormatException
- 如果 val 為無窮大或 NaN。public BigDecimal(double val, MathContext mc)
此建構子的結果有一定的不可預知性,通常不建議使用它,請參見 BigDecimal(double)
建構子下面的註釋。
val
- 要轉換為 BigDecimal 的 double 值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是 RoundingMode 為 UNNECESSARY。
NumberFormatException
- 如果 val 為無窮大或 NaN。public BigDecimal(BigInteger val)
val
- 要轉換為 BigDecimal 的 BigInteger 值。public BigDecimal(BigInteger val, MathContext mc)
val
- 要轉換為 BigDecimal 的 BigInteger 值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal(BigInteger unscaledVal, int scale)
unscaledVal
- BigDecimal 的非標度值。scale
- BigDecimal 的標度。public BigDecimal(BigInteger unscaledVal, int scale, MathContext mc)
unscaledVal
- BigDecimal 的非標度值。scale
- BigDecimal 的標度。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal(int val)
val
- 要轉換為 BigDecimal 的 int 值。public BigDecimal(int val, MathContext mc)
val
- 要轉換為 BigDecimal 的 int 值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal(long val)
val
- 要轉換為 BigDecimal 的 long 值。public BigDecimal(long val, MathContext mc)
val
- 要轉換為 BigDecimal 的 long 值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。方法詳細資訊 |
---|
public static BigDecimal valueOf(long unscaledVal, int scale)
unscaledVal
- BigDecimal 的非標度值。scale
- BigDecimal 的標度。
public static BigDecimal valueOf(long val)
val
- BigDecimal 的值。
public static BigDecimal valueOf(double val)
Double.toString(double)
方法提供的 double 規範的字元串表示形式將 double 轉換為 BigDecimal。
註:這通常是將 double(或 float)轉化為 BigDecimal 的首選方法,因為返回的值等於從建構 BigDecimal(使用 Double.toString(double)
得到的結果)得到的值。
val
- 要轉換為 BigDecimal 的 double。
NumberFormatException
- 如果 val 為無窮大或 NaN。public BigDecimal add(BigDecimal augend)
augend
- 將添加到此 BigDecimal 中的值。
public BigDecimal add(BigDecimal augend, MathContext mc)
augend
- 將添加到此 BigDecimal 中的值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal subtract(BigDecimal subtrahend)
subtrahend
- 從此 BigDecimal 減去的值。
public BigDecimal subtract(BigDecimal subtrahend, MathContext mc)
subtrahend
- 從此 BigDecimal 減去的值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal multiply(BigDecimal multiplicand)
multiplicand
- 乘以此 BigDecimal 的值。
public BigDecimal multiply(BigDecimal multiplicand, MathContext mc)
multiplicand
- 乘以此 BigDecimal 的值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
相對於此遺留方法,應優先使用新的 divide(BigDecimal, int, RoundingMode)
方法。
divisor
- 此 BigDecimal 要除以的值。scale
- 要返回的 BigDecimal 商的標度。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 divisor 為零,則 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 divisor, int scale, RoundingMode roundingMode)
divisor
- 此 BigDecimal 要除以的值。scale
- 要返回的 BigDecimal 商的標度。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 divisor 為零,則 roundingMode==RoundingMode.UNNECESSARY 和指定的標度不足以準確地表示相除的結果。public BigDecimal divide(BigDecimal divisor, int roundingMode)
相對於此遺留方法,應優先使用新的 divide(BigDecimal, RoundingMode)
方法。
divisor
- 此 BigDecimal 要除以的值。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 divisor==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 divide(BigDecimal divisor, RoundingMode roundingMode)
divisor
- 此 BigDecimal 要除以的值。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 divisor==0 或者 roundingMode==RoundingMode.UNNECESSARY 和 this.scale() 不足以準確地表示相除的結果。public BigDecimal divide(BigDecimal divisor)
divisor
- 此 BigDecimal 要相除的值。
ArithmeticException
- 如果準確的商值沒有無窮的十進制擴展public BigDecimal divide(BigDecimal divisor, MathContext mc)
divisor
- 此 BigDecimal 要除以的值。mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY 或 mc.precision == 0,並且商值具有無窮的十進制擴展。public BigDecimal divideToIntegralValue(BigDecimal divisor)
(this.scale() - divisor.scale())
。
divisor
- 此 BigDecimal 要除以的值。
ArithmeticException
- 如果 divisor==0public BigDecimal divideToIntegralValue(BigDecimal divisor, MathContext mc)
(this.scale() - divisor.scale())
。如果準確商值的整數部分需要的位數多於 mc.precision,則拋出 ArithmeticException。
divisor
- 此 BigDecimal 要相除的值。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果 mc.precision > 0,並且該結果需要的精度大於 mc.precision。public BigDecimal remainder(BigDecimal divisor)
餘數由 this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) 給出。注意,這不是模操作(結果可以為負)。
divisor
- 此 BigDecimal 要除以的值。
ArithmeticException
- 如果 divisor==0public BigDecimal remainder(BigDecimal divisor, MathContext mc)
餘數由 this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)) 給出。注意,這不是模操作(結果可以為負)。
divisor
- 此 BigDecimal 要相除的值。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果結果不準確,但捨入網要為 UNNECESSARY,或者 mc.precision > 0,並且 this.divideToIntgralValue(divisor) 的結果要求的精度大於 mc.precision。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor)
注意,如果同時需要整數商和餘數,則此方法比分別使用 divideToIntegralValue 和 remainder 方法更快速,因為相除僅需執行一次。
divisor
- 此 BigDecimal 要相除的值和計算的餘數。
ArithmeticException
- 如果 divisor==0divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
,
remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal[] divideAndRemainder(BigDecimal divisor, MathContext mc)
注意,如果同時需要整數商和餘數,則此方法比分別使用 divideToIntegralValue 和 remainder 方法更快速,因為相除僅需執行一次。
divisor
- 此 BigDecimal 要相除的值和計算的餘數。mc
- 要使用的上下文。
ArithmeticException
- 如果 divisor==0
ArithmeticException
- 如果結果不準確,但捨入網要為 UNNECESSARY,或者 mc.precision > 0,並且 this.divideToIntgralValue(divisor) 的結果要求的精度大於 mc.precision。divideToIntegralValue(java.math.BigDecimal, java.math.MathContext)
,
remainder(java.math.BigDecimal, java.math.MathContext)
public BigDecimal pow(int n)
參數 n 必須在 0 到 999999999(包括)之間。ZERO.pow(0) 返回 ONE
。
注意,未來版本可能會擴展此方法允許的指數範圍。
n
- 此 BigDecimal 的冪。
ArithmeticException
- 如果 n 超出範圍。public BigDecimal pow(int n, MathContext mc)
X3.274-1996 演算法為:
ONE
(即使 this 為零),否則
n
- 此 BigDecimal 的冪。mc
- 要使用的上下文。
ArithmeticException
- 如果該結果不準確,但是捨入網要為 UNNECESSARY,或者 n 超出範圍。public BigDecimal abs()
public BigDecimal abs(MathContext mc)
mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal negate()
public BigDecimal negate(MathContext mc)
mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。public BigDecimal plus()
此方法僅返回此 BigDecimal,該方法與一元減方法 negate()
對稱。
negate()
public BigDecimal plus(MathContext mc)
此方法的效果與 round(MathContext)
方法的效果相同。
mc
- 要使用的上下文。
ArithmeticException
- 如果結果不準確,但是捨入網要為 UNNECESSARY。round(MathContext)
public int signum()
public int scale()
public int precision()
零值的精度是 1。
public BigInteger unscaledValue()
public BigDecimal round(MathContext mc)
此方法的效果與 plus(MathContext)
方法的效果相同。
mc
- 要使用的上下文。
ArithmeticException
- 如果捨入網要為 UNNECESSARY,並且 BigDecimal 操作要求進行捨入。plus(MathContext)
public BigDecimal setScale(int newScale, RoundingMode roundingMode)
newScale
- 要返回的 BigDecimal 值的標度。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 roundingMode==UNNECESSARY,並且指定的標度操作要求進行捨入。RoundingMode
public BigDecimal setScale(int newScale, int roundingMode)
注意,由於 BigDecimal 物件是不可變的,此方法的調用不會 導致初始物件被修改,這與使用名為 setX 變異欄位 X 方法的常規約定相反。相反,setScale 返回具有適當標度的物件;返回的物件不一定是新分派的。
相對於此遺留方法,應優先使用新的 setScale(int, RoundingMode)
方法。
newScale
- 要返回的 BigDecimal 值的標度。roundingMode
- 要應用的捨入網要。
ArithmeticException
- 如果 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 newScale)
此調用通常用於增加標度,在這種情況下,可以保證存在指定標度和正確值的 BigDecimal。如果調用方知道 BigDecimal在其小數部分的結尾有足夠多的零(即其整數值中的十的因子),則該調用也可用於減少標度,以允許重新標度,而不更改其值。
此方法返回與 setScale 的兩個參數版本相同的結果,但是,為調用方省去了指定捨入網要的麻煩(捨入網要不影響結果)。
注意,由於 BigDecimal 物件是不可變的,因此此方法的調用不會 導致初始物件被修改,這與使用名為 setX 變異欄位 X 方法的常規約定相反。相反,setScale 返回具有適當標度的物件;返回的物件不一定是新分派的。
newScale
- 要返回的 BigDecimal 值的標度。
ArithmeticException
- 如果指定的標度操作要求進行捨入。setScale(int, int)
,
setScale(int, RoundingMode)
public BigDecimal movePointLeft(int n)
n
- 將小數點向左移動的位數。
ArithmeticException
- 如果標度溢位。public BigDecimal movePointRight(int n)
n
- 將小數點向右移動的位數。
ArithmeticException
- 如果標度溢位。public BigDecimal scaleByPowerOfTen(int n)
ArithmeticException
- 如果該標度的範圍超出 32 位整數的範圍。public BigDecimal stripTrailingZeros()
public int compareTo(BigDecimal val)
Comparable<BigDecimal>
中的 compareTo
val
- 將此 BigDecimal 與之比較的 BigDecimal。
public boolean equals(Object x)
compareTo
不同,僅當兩個 BigDecimal 物件的值和標度都相等時,此方法才認為它們相等(因此通過此方法進行比較時,2.0 不等於 2.00)。
Object
中的 equals
x
- 將與此 BigDecimal 進行比較的 Object。
compareTo(java.math.BigDecimal)
,
hashCode()
public BigDecimal min(BigDecimal val)
val
- 要計算最小值的值。
compareTo
方法的定義,如果它們相等,則返回 this。compareTo(java.math.BigDecimal)
public BigDecimal max(BigDecimal val)
val
- 要計算最大值的值。
compareTo
方法的定義,如果它們相等,則返回 this。compareTo(java.math.BigDecimal)
public int hashCode()
Object
中的 hashCode
equals(Object)
public String toString()
根據以下步驟可創建 BigDecimal 的標準的規範化字元串形式:首先,使用不帶前導零的字元 '0' 至 '9'(如果其值為零,則使用單個 '0' 字元)將 BigDecimal 的非標度值的絕對值轉換為以十為進制的字元串。
其次,計算調整的指數;這是無效的標度,加上轉換的非標度值中的字元數減 1。即:-scale+(ulength-1),其中 ulength 是十進制數字中非標度值的絕對值的長度(其精度)。
如果該標度大於或等於零,並且調整的指數大於或等於 -6,則在不使用指數記數法的情況下將該數轉換為字元形式。在這種情況下,如果標度為零,則不添加小數點,如果標度為正數,則插入小數點,且標度指定了小數點右邊的字元個數。必要時,將字元 '0' 添加到轉換的非標度值的左邊。如果插入後小數點前面沒有字元,則以傳統字元 '0' 為前綴。
否則(即:如果標度為負數,或者調整的指數小於 -6),使用指數記數法將該數轉換為字元形式。在這種情況下,如果轉換後的 BigInteger 多於一位數,則小數點插入在第一個數字之後。然後,將字元形式的指數作為轉換的非標度值(也許具有插入的小數點)的後綴;這包含字母 'E' 和直接跟在其後的轉換為字元形式的調整指數。後者的進制為十,使用的字元是 '0' 到 '9',沒有前導零,並且,如果調整的指數為負數,則總是以符號字元 '-' ('\u002D') 為前綴,否則以 '+' ('\u002B') 為前綴。
最後,如果非標度值小於零,則整個字元串以減號 '-' ('\u002D') 為前綴。如果非標度值為零或正數,則不使用符號字元作為前綴。
範例:
對於左邊的每個表示形式 [unscaled value, scale],得到的字元串顯示在右邊。
[123,0] "123" [-123,0] "-123" [123,-1] "1.23E+3" [123,-3] "1.23E+5" [123,1] "12.3" [123,5] "0.00123" [123,10] "1.23E-8" [-123,12] "-1.23E-10"註:
BigDecimal(String)
建構子將該字元串表示形式轉換為 BigDecimal,則將恢復初始值。
NumberFormat
類別及其子類別可以處理區分語言環境的數的格式化和分析。
toEngineeringString()
方法可用於在工程計數法中表示帶有指數的數。setScale
方法可用於對 BigDecimal 進行捨入,使其小數點後的位數為已知位數。
Object
中的 toString
Character.forDigit(int, int)
,
BigDecimal(java.lang.String)
public String toEngineeringString()
返回如 toString()
方法中所描述的表示 BigDecimal 的字元串,不包括使用指數記數法的情況,將十的冪調整為三的倍數(工程記數法),這樣,非零值的整數部分的範圍是 1 到 999。如果對零值使用指數記數法,則使用小數點和小數的一(或二)個零數字,以便保留零值的標度。注意,與 toString()
的輸出不同,如果使用 string constructor 將輸出字元串轉換為 BigDecimal,則此方法的輸出不 保證恢復此 BigDecimal 的相同 [integer, scale] 對。此方法滿足以下較弱約束,即產生的結果在數值上始終等於將字元串建構子應用到方法的輸出得到的結果。
public String toPlainString()
toString()
,
toEngineeringString()
public BigInteger toBigInteger()
要在轉換不準確時(即當丟棄非零小數部分時)拋出異常,請使用 toBigIntegerExact()
方法。
public BigInteger toBigIntegerExact()
ArithmeticException
- 如果 this 具有非零小數部分。public long longValue()
Number
中的 longValue
public long longValueExact()
ArithmeticException
- 如果 this 具有非零小數部分,或者不適合用 long 表示。public int intValue()
Number
中的 intValue
public int intValueExact()
ArithmeticException
- 如果 this 具有非零小數部分,或者不適合用 int 表示。public short shortValueExact()
ArithmeticException
- 如果 this 具有非零小數部分,或者不適合用 short 表示。public byte byteValueExact()
ArithmeticException
- 如果 this 具有非零小數部分,或者不適合用 byte 表示。public float floatValue()
Float.NEGATIVE_INFINITY
或 Float.POSITIVE_INFINITY
。注意,即使在返回值為有限值的情況下,此轉換也可能丟失關於 BigDecimal 值精度的資訊。
Number
中的 floatValue
public double doubleValue()
Double.NEGATIVE_INFINITY
或 Double.POSITIVE_INFINITY
。注意,即使在返回值為有限值的情況下,此轉換也可能丟失關於 BigDecimal 值精度的資訊。
Number
中的 doubleValue
public BigDecimal ulp()
this
相同的標度存儲該結果,這樣,零和非零值的結果等於 [1, this.scale()]
。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。