不可變的、任意精度的帶符號(hào)的十進(jìn)制數(shù)。 一個(gè) BigDecimal
由一個(gè)任意精度的整數(shù)值和一個(gè)非負(fù)的整數(shù)標(biāo)度組成,整數(shù)標(biāo)度代表小數(shù)點(diǎn)右邊的十進(jìn)制數(shù)字的個(gè)數(shù)(用 BigDecimal 表示的數(shù)值大小是
intVal/10**scale)。 BigDecimals 提供基本的算術(shù)操作、精度處理、比較、格式轉(zhuǎn)換和散列。
BigDecimal 類(lèi)使它的用戶對(duì)舍入行為有完全的控制權(quán),迫使用戶顯式地指定能夠舍棄部分精度(
(除法 和 setScale))的舍入操作的舍入行為。為達(dá)到該目的,該類(lèi)提供了八個(gè)
舍入模式 。同時(shí)針對(duì)
BigDecimal 的精度操作提供了兩種類(lèi)型的操作:數(shù)值調(diào)整/舍入
(scaling/rounding)操作和小數(shù)點(diǎn)移動(dòng)操作。Scaling/Rounding 操作 (SetScale) 返回一個(gè) BigDecimal,其數(shù)值近似 (或精確) 等于操作數(shù),其有效范圍是指定的值;也就是說(shuō),它們以對(duì)數(shù)值產(chǎn)生最小影響的方式增加或減少精度。十進(jìn)制小數(shù)點(diǎn)移動(dòng)操作 (movePointLeft 和 movePointRight)返回一個(gè) BigDecimal ,它是把操作數(shù)的小數(shù)點(diǎn)在指定方向移動(dòng)一個(gè)指定距離產(chǎn)生的;這種操作可以改變一個(gè)數(shù)字的值但不影響它的精度。
類(lèi) java.math.BigDecimal
java.lang.Object
|
+----java.lang.Number
|
+----java.math.BigDecimal
- public class BigDecimal
- extends Number
- 參見(jiàn):
- BigInteger
變量索引
- ROUND_CEILING
- 如果 BigDecimal 是正的,則做 ROUND_UP 操作;如果為負(fù),則做 ROUND_DOWN 操作。
- ROUND_DOWN
- 從不在舍棄(即截?cái)?的小數(shù)之前增加數(shù)字。
- ROUND_FLOOR
- 如果 BigDecimal 為正,則作 ROUND_UP ;如果為負(fù),則作 ROUND_DOWN 。
- ROUND_HALF_DOWN
- 若舍棄部分> .5,則作 ROUND_UP;否則,作 ROUND_DOWN 。
- ROUND_HALF_EVEN
- 如果舍棄部分左邊的數(shù)字為奇數(shù),則作 ROUND_HALF_UP ;如果它為偶數(shù),則作 ROUND_HALF_DOWN 。
- ROUND_HALF_UP
- 若舍棄部分>=.5,則作 ROUND_UP ;否則,作 ROUND_DOWN 。
- ROUND_UNNECESSARY
- 該“偽舍入模式”實(shí)際是指明所要求的操作必須是精確的,,因此不需要舍入操作。
- ROUND_UP
- 總是在非 0 舍棄小數(shù)(即截?cái)?之前增加數(shù)字。
構(gòu)造子索引
- BigDecimal(BigInteger)
- 把一個(gè) BigInteger 翻譯成 BigDecimal 。
- BigDecimal(BigInteger, int)
- 把一個(gè) BigInteger 和一個(gè)標(biāo)度翻譯成 BigDecimal 。
- BigDecimal(double)
- 把一個(gè) double 型翻譯成 BigDecimal 。
- BigDecimal(String)
- 從一個(gè)字符串構(gòu)造 BigDecimal ,該字符串包含一個(gè)可選的減號(hào),后面跟著一串零或十進(jìn)制數(shù)字串,再后面是一個(gè)可選的小數(shù)部分,該小數(shù)部分包含一個(gè)小數(shù)點(diǎn)和一串零或十進(jìn)制數(shù)字串。
方法索引
- abs()
- 返回一個(gè) BigDecimal ,其值是該數(shù)的絕對(duì)值,其標(biāo)度是 this.scale() 。
- add(BigDecimal)
- 返回一個(gè) BigDecimal ,其值是 (this + val),其標(biāo)度是 MAX(this.scale(),val.scale) 。
- compareTo(BigDecimal)
- 返回 -1、0 或 1,分別表示該數(shù)是小于、等于、或大于 val 。
- divide(BigDecimal, int)
- 返回一個(gè) BigDecimal ,其值是 (this/val),其標(biāo)度是 this.scale() 。
- divide(BigDecimal, int, int)
- 返回一個(gè) BigDecimal ,其值是 (this / val),其標(biāo)度是指定值 。
- doubleValue()
- 把一個(gè)數(shù)字轉(zhuǎn)換為 double 型。
- equals(Object)
- 如果 x 是一個(gè)等于該數(shù)字的 BigDecimal ,則返回 true。
- floatValue()
- 把該數(shù)字轉(zhuǎn)換為 float 型。
- hashCode()
- 計(jì)算該對(duì)象的散列碼。
- intValue()
- 把該數(shù)字轉(zhuǎn)換為 int 值。
- longValue()
- 把該數(shù)字轉(zhuǎn)換為 long 型。
- max(BigDecimal)
- 返回 BigDecimal ,其值是 this 和 val 中的較大者。
- min(BigDecimal)
- 返回 BigDecimal ,其值是 this 和 val 中的較小者。
- movePointLeft(int)
- 返回一個(gè) BigDecimal ,其值等于該數(shù)十進(jìn)制小數(shù)點(diǎn)向左移動(dòng)
n 位后所得的值。
- movePointRight(int)
- 把十進(jìn)制小數(shù)點(diǎn)按指定數(shù)值向右移動(dòng)相應(yīng)位數(shù)。
- multiply(BigDecimal)
- 返回一個(gè) BigDecimal ,其值是 (this * val),其標(biāo)度是 this.scale() + val.scale 。
- negate()
- 返回一個(gè) BigDecimal ,其值是 -1 * val ,其標(biāo)度是 this.scale() 。
- scale()
- 返回該數(shù)值的標(biāo)度。
- setScale(int)
- 返回一個(gè) BigDecimal ,其標(biāo)度是指定值,其數(shù)值精確等于該數(shù)字的值。
- setScale(int, int)
- 返回一個(gè) BigDecimal ,其標(biāo)度是指定值,其整數(shù)值是該 BigDecimal 的整數(shù)部分被 10 的適當(dāng)次冪(保持整個(gè)數(shù)值不變)乘或者除得到。
- signum()
- 返回該數(shù)值的符號(hào)(即根據(jù)該數(shù)的值是正、零或負(fù)返回 -1 、
0 或 1 )。
- subtract(BigDecimal)
- 返回一個(gè) BigDecimal ,其值是 (this - val),其標(biāo)度是 MAX(this.scale(),val.scale) 。
- toBigInteger()
- 把該數(shù)字轉(zhuǎn)換為 BigInteger 。
- toString()
- 返回表示該數(shù)字的字符串。
- valueOf(long)
- 按照給定的值和零標(biāo)度返回一個(gè) BigDecimal 。
- valueOf(long, int)
- 返回一個(gè) BigDecimal ,其值是 (val/10**scale)。
變量
ROUND_UP
public static final int ROUND_UP
- 總是在非零的舍棄小數(shù)(即截?cái)?之前增加數(shù)字。
注意該舍入模式不減少量值。
(從零開(kāi)始舍入)
ROUND_DOWN
public static final int ROUND_DOWN
- 從不在舍棄的小數(shù)(即截?cái)?之前增加數(shù)字。 注意該舍入模式不增加量值。 (舍入到零)
ROUND_CEILING
public static final int ROUND_CEILING
- 如果 BigDecimal 為正,則作 ROUND_UP 操作;如果為負(fù),則作 ROUND_DOWN 操作。注意該舍入模式不減少值。(舍入到正無(wú)窮大)
ROUND_FLOOR
public static final int ROUND_FLOOR
- 如果 BigDecimal 為正,則作 ROUND_UP ;如果為負(fù),則作 ROUND_DOWN 。注意該舍入模式不增加值。(舍入到負(fù)無(wú)窮大)
ROUND_HALF_UP
public static final int ROUND_HALF_UP
- 若舍棄部分>=.5,則作 ROUND_UP ;否則,則作 ROUND_DOWN (舍入到 “最近的數(shù)值”,除非向上舍入和向下舍入的距離是相等的)。
ROUND_HALF_DOWN
public static final int ROUND_HALF_DOWN
- 若舍棄部分> .5 ,則作 ROUND_DOWN;否則,作 ROUND_DOWN 操作(舍入到 “最近的數(shù)值”,除非向下舍入和向上舍入的距離相等)。
ROUND_HALF_EVEN
public static final int ROUND_HALF_EVEN
- 如果舍棄部分左邊的數(shù)字為奇數(shù),則作 ROUND_HALF_UP 操作;如果它為偶數(shù),則作 ROUND_HALF_DOWN 操作(舍入到 “最近的數(shù)值”,除非向到兩邊的距離相等)。
ROUND_UNNECESSARY
public static final int ROUND_UNNECESSARY
- 該 “偽舍入模式”實(shí)際是要求操作有一個(gè)精確結(jié)果,,因此不需要舍入。如果該舍入模式對(duì)一個(gè)指定的操作產(chǎn)生不精確的結(jié)果,則拋出算術(shù)異常。
構(gòu)造子
BigDecimal
public BigDecimal(String val) throws NumberFormatException
- 從一個(gè)字符串構(gòu)造 BigDecimal ,該字符串包含可選的減號(hào),后面跟著一串零或十進(jìn)制數(shù)字序列,再后面可能會(huì)跟著一個(gè)小數(shù)部分,該小數(shù)部分由一個(gè)小數(shù)點(diǎn)和一串零或一個(gè)十進(jìn)制數(shù)字序列構(gòu)成。字符串必須至少包含一個(gè)整數(shù)部分或一個(gè)小數(shù)部分。作為結(jié)果的 BigDecimal 標(biāo)度將是字符串中十進(jìn)制小數(shù)點(diǎn)右邊的數(shù)字,如果字符串中未包含十進(jìn)制小數(shù)點(diǎn)則為零。字符到數(shù)字的映射是由 Character.digit 提供的。
任何外部字符 (包括空白符) 將導(dǎo)致一個(gè) NumberFormatException 異常。
BigDecimal
public BigDecimal(double val) throws NumberFormatException
- 把一個(gè) double 型翻譯成 BigDecimal 。BigDecimal
的標(biāo)度是使 10**scale * val 為一整數(shù)的最小數(shù)值。
一個(gè) double 值,若為負(fù)無(wú)窮、正無(wú)窮或 NaN 將導(dǎo)致一個(gè)
NumberFormatException 異常。
BigDecimal
public BigDecimal(BigInteger val)
- 把一個(gè) BigInteger 翻譯成 BigDecimal 。 BigDecimal
的標(biāo)度為零。
BigDecimal
public BigDecimal(BigInteger val,int scale)
throws NumberFormatException
- 把一個(gè) BigInteger 和一個(gè)標(biāo)度翻譯成一個(gè) BigDecimal 。
BigDecimal 的值是 (BigInteger/10**scale) 。 負(fù)標(biāo)度將導(dǎo)致一個(gè)
NumberFormatException 異常。
方法
valueOf
public static BigDecimal valueOf(long val, int scale)
throws NumberFormatException
- 返回一個(gè) BigDecimal ,其值是 (val/10**scale) 。 該函數(shù)首選使用 (long) 構(gòu)造子,因?yàn)樗试S對(duì) BigDecimals (如 0 和 1)的頻繁使用進(jìn)行重用,從而消除了輸出常數(shù)時(shí)的這種需要。
一個(gè)負(fù)標(biāo)度將導(dǎo)致
NumberFormatException 異常。
valueOf
public static BigDecimal valueOf(long val)
- 用給定的值和零標(biāo)度構(gòu)造并返回一個(gè) BigDecimal 。該函數(shù)首選使用 (long) 構(gòu)造子,因?yàn)樗试S對(duì) BigDecimals (如 0 和 1)的頻繁使用進(jìn)行重用,從而消除了輸出常數(shù)時(shí)的這種需要。
add
public BigDecimal add(BigDecimal val)
- 返回一個(gè) BigDecimal ,其值是 (this + val),其標(biāo)度是 MAX(this.scale(),val.scale) 。
subtract
public BigDecimal subtract(BigDecimal val)
- 返回一個(gè) BigDecimal ,其值是 (this - val),其標(biāo)度是 MAX(this.scale(),val.scale) 。
multiply
public BigDecimal multiply(BigDecimal val)
- 返回一個(gè) BigDecimal ,其值是 (this * val),其標(biāo)度是 this.scale() + val.scale 。
divide
public BigDecimal divide(BigDecimal val,int scale,int roundingMode)
throws ArithmeticException, IllegalArgumentException
- 返回一個(gè) BigDecimal ,其值是 (this / val),其標(biāo)度是指定值。如果必須執(zhí)行舍入對(duì)給定的標(biāo)度生成一個(gè)結(jié)果,則使用指定的舍入模式。如果 val == 0 ,scale <0 ,或舍入模式是 round_un necessary 并且指定的標(biāo)度不足以表示除法結(jié)果的精確度時(shí),拋出 arithmeticexception 異常;如果 roundingmode 不是有效的舍入模式,則拋出 illegalargumentexception 異常。
divide
public BigDecimal divide(BigDecimal val, int roundingMode)
throws ArithmeticException, IllegalArgumentException
- 返回一個(gè) BigDecimal ,其值是 (this/val),其標(biāo)度是 this.scale() 。 如果必須執(zhí)行舍入對(duì)給定的標(biāo)度生成一個(gè)結(jié)果,則將使用指定的舍入模式。 如果 val == 0 ,則拋出
ArithmeticException 異常。 如果 roundingMode 不是有效的舍入模式,則拋出 IlegalArgumentException 異常。
abs
public BigDecimal abs()
- 返回一個(gè) BigDecimal ,其值是該數(shù)字的絕對(duì)值,其標(biāo)度是 this.scale() 。
negate
public BigDecimal negate()
- 返回一個(gè) BigDecimal ,其值是 -1 * val ,其標(biāo)度是 this.scale()。
signum
public int signum()
- 返回該數(shù)值的符號(hào) (根據(jù)該數(shù)的值是正、零或負(fù)返回 -1 、 0 或 1 )。
scale
public int scale()
- 返回該數(shù)字的標(biāo)度。
setScale
public BigDecimal setScale(int scale,int roundingMode)
throws ArithmeticException, IllegalArgumentException
- 返回一個(gè) BigDecimal ,其標(biāo)度是指定值,其整數(shù)值是 BigDecimal 整數(shù)部分被 10 的適當(dāng)次冪(保持整個(gè)數(shù)值不變)除或乘得到的。如果標(biāo)度被操作減小,則必須除整數(shù)部分
(而不是乘),這可能丟失精度;這種情況下,除法將使用指定的舍入模式。
如果標(biāo)度為負(fù),或者舍入模式是 ROUND_UNNECESSARY 并且它不能執(zhí)行不丟失精度的調(diào)整標(biāo)度的操作時(shí)拋出 ArithmeticException ;如果 roundingMode
不是有效的舍入模式,則拋出 IlegalArgumentException。
setScale
public BigDecimal setScale(int scale)
throws ArithmeticException, IllegalArgumentException
- 返回一個(gè) BigDecimal ,其標(biāo)度是指定值,其值精確等于該數(shù)字的值。如果不可能做到則拋出 ArithmeticException 異常。該調(diào)用的典型應(yīng)用是用來(lái)增加標(biāo)度,它確保有一個(gè)指定標(biāo)度和正確數(shù)值的
BigDecimal 。 這個(gè)調(diào)用也可被用來(lái)減少標(biāo)度,如果調(diào)用者知道那個(gè)數(shù)字的小數(shù)結(jié)尾部分有足夠多的零 (比如它的整數(shù)部分的十倍數(shù)因子),那么就可重新標(biāo)度而不丟失精度。注意該調(diào)用返回的結(jié)果同使用兩參數(shù)版本的
setScale 相同,這樣就避免了調(diào)用者指定舍入模式這樣的麻煩,因?yàn)樵谀欠N情況下指定舍入模式是不相關(guān)的。
movePointLeft
public BigDecimal movePointLeft(int n)
- 返回一個(gè) BigDecimal ,它于該數(shù)十進(jìn)制小數(shù)點(diǎn)向左移動(dòng)
n 位后所得的值。若 n 非負(fù),該調(diào)用僅把標(biāo)度增加
n 。若 n 是負(fù)的,則該調(diào)用等價(jià)于調(diào)用
movePointRight(-n) ( 該調(diào)用返回的 BigDecimal 值是
(this * 10**-n) 并且標(biāo)度是 MAX(this.scale()+n, 0))。
movePointRight
public BigDecimal movePointRight(int n)
- 把小數(shù)點(diǎn)按指定數(shù)值向右移動(dòng)相應(yīng)位數(shù)。
如果該數(shù)的標(biāo)度 >= n,該調(diào)用只從標(biāo)度減去 n ;否則它把標(biāo)度設(shè)為零,并且乘以整數(shù)值
10 ** (n - this.scale) 。如果 n 是負(fù)的,則該調(diào)用等價(jià)于
movePointLeft(-n)(該調(diào)用返回的 BigDecimal 值是
(this * 10**n) 并且標(biāo)度是 MAX(this.scale()-n, 0))。
compareTo
public int compareTo(BigDecimal val)
- 按照該數(shù)值是小于、等于或大于 val分別返回 -1、0 或 1 。兩個(gè) BigDecimals 在數(shù)值上相同但有不同的標(biāo)度
(例如 2.0, 2.00)時(shí),該方法認(rèn)為它們是相等的。
該方法首選使用所提供的六個(gè)邏輯比較運(yùn)算符
(<, ="=,">, >=, !=, <=)。執(zhí)行這些比較的慣用方法是: (x.compareto(y) 0),其中 是六個(gè)比較符中的一個(gè)。
equals
public boolean equals(Object x)
- 如果 x 等于該數(shù)值,則返回 true 。
提供該方法的目的是使 BigDecimals 能被用做散列碼關(guān)鍵字。
不同于 compareTo ,當(dāng)且僅當(dāng)兩個(gè) BigDecimals 的值和標(biāo)度都相同時(shí),該方法才認(rèn)為它們兩個(gè)相等。
- 覆蓋:
- 類(lèi) Object 中的
equals
min
public BigDecimal min(BigDecimal val)
- 返回 BigDecimal ,其值是 this 和 val 中的較小者。
若值相等(根據(jù) compareTo 運(yùn)算符定義) ,則兩者都有可能被返回。
max
public BigDecimal max(BigDecimal val)
- 返回 BigDecimal ,其值是 this 和 val 中的較大者。
若值相等(根據(jù) compareTo 運(yùn)算符定義) ,則兩者都有可能被返回。
hashCode
public int hashCode()
- 為該對(duì)象計(jì)算一個(gè)散列碼。兩個(gè) BigDecimals 在數(shù)值上相同但有不同的標(biāo)度
(例如 2.0,2.00)時(shí)不會(huì)產(chǎn)生相同的散列碼。
- 覆蓋:
- 類(lèi) Object 中的 hashCode
toString
public String toString()
- 返回該數(shù)值的字符串表示(將使用由
Character.forDigit 提供的數(shù)字到字符的映射)。
減號(hào)和十進(jìn)制小數(shù)點(diǎn)被用于指示符號(hào)和標(biāo)度( 該表示法和(String, int)構(gòu)造子是兼容的)。
- 覆蓋:
- 類(lèi) Object 中的 toString
toBigInteger
public BigInteger toBigInteger()
- 把該數(shù)字轉(zhuǎn)換為 BigInteger 。標(biāo)準(zhǔn)的限制原語(yǔ)轉(zhuǎn)換同《Java 語(yǔ)言規(guī)范》一樣。 特別要注意的是,該數(shù)字的任何小數(shù)部分將被截?cái)唷?br />
intValue
public int intValue()
- 把該數(shù)字轉(zhuǎn)換為一個(gè) int 值。 標(biāo)準(zhǔn)的限制原語(yǔ)轉(zhuǎn)換同
《Java 語(yǔ)言規(guī)范》一樣。 特別要注意的是,該數(shù)字的任何小數(shù)部分將被截?cái)唷?br />
- 覆蓋:
- 類(lèi) Number 中的
intValue
longValue
public long longValue()
- 把該數(shù)字轉(zhuǎn)換為一個(gè) long 型值。 標(biāo)準(zhǔn)的限制原語(yǔ)轉(zhuǎn)換同
《Java 語(yǔ)言規(guī)范》一樣。 特別要注意的是,該數(shù)字的任何小數(shù)部分將被截?cái)唷?br />
- 覆蓋:
- 類(lèi) Number 中的
longValue
floatValue
public float floatValue()
- 把該數(shù)字轉(zhuǎn)換為 float 型。 類(lèi)似于《Java 語(yǔ)言規(guī)范》中定義的 double-to-float
限制原語(yǔ)轉(zhuǎn)換:如果數(shù)值太大以致不能表示為浮點(diǎn)數(shù)時(shí),則將它適當(dāng)?shù)剞D(zhuǎn)換為無(wú)窮大或負(fù)無(wú)窮大。
- 覆蓋:
- 類(lèi)
Number 中的
floatValue
doubleValue
public double doubleValue()
- 把該數(shù)字轉(zhuǎn)換為 double 型。 類(lèi)似于《Java 語(yǔ)言規(guī)范》中定義的
double-to-float 限制原語(yǔ)轉(zhuǎn)換:如果數(shù)值太大以致不能表示為雙精度數(shù)時(shí),則將它適當(dāng)轉(zhuǎn)換為無(wú)窮大或負(fù)無(wú)窮大。
- 覆蓋:
- 類(lèi)
Number 中的
doubleValue