[十五]java.math包簡介,RoundingMode與MathContext

java.math包提供了java中的數學類
包括基本的浮點庫、複雜運算以及任意精度的數據運算
 
image_5bd6634a_5366
'能夠看獲得,主要包括三個類一個枚舉
BigDecimal和BigInteger接下來會詳細介紹
先說下另外兩個
 

RoundingMode

舍入行爲/ 近似模式

image_5bd6634a_227b
 
對於不少計算,均可能涉及到精度的問題
好比兩個數進行除法, 十進制下,1/3 
結果爲無限循環小數
顯然計算機中不可能保存這個無限循環的小數,那麼這個 0.3333333......
你到底要近似成爲多少?
0?  0.5? 0.33? 1?
RoundingMode 就是這麼一個存在
如同它的名字同樣,近似模式
爲可能丟棄精度的數值操做指定一種舍入行爲

舍入模式

UP 遠離零方向舍入
DOWN 向零方向舍入
image_5bd6634a_35c1
CEILING 向正無限大方向舍入
FLOOR 向負無限大方向舍入
image_5bd6634a_53c9
HALF_UP 向最接近數字方向舍入
若是與兩個相鄰數字的距離相等,則向上舍入
HALF_DOWN 向最接近數字方向舍入
若是與兩個相鄰數字的距離相等,則向下舍入
HALF_EVEN
向最接近數字方向舍入
若是與兩個相鄰數字的距離相等,則向相鄰的偶數舍入
HALF_UP/ HALF_DOWN /  HALF_DOWN  都是最接近數字舍入
不過若是兩個相鄰的數字距離相等,將會採起不一樣的模式
HALF_UP就是平時的四捨五入
 
 
UNNECESSARY 用於斷言的舍入模式
請求的操做具備精確的結果,不須要進行舍入
 

示例

image_5bd6634a_25d7
 
擁有靜態的valueOf方法,對BigDecimal中的常量,進行映射轉換
返回RoundingMode對象
image_5bd6634b_40d0
 
這個enum 是打算用來替代 BigDecimal中的舍入模式常量
(BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 等)
因此後續寫代碼使用這個枚舉
 

MathContext

計算上下文/數學規則
image_5bd6634b_6c63
RoundingMode 是舍入模式的抽象描述,僅僅描述了舍入的規則
可是運算中還有一些其餘的規則,好比
保留幾位有效數字?
MathContext則是針對於計算的更進一步抽象
是封裝上下文設置的不可變對象,它描述數字運算符的某些規則
他擁有兩個屬性
precision:某個操做使用的數字個數;結果舍入到此精度
roundingMode:一個 RoundingMode 對象,該對象指定舍入使用的算法
image_5bd6634b_4bf5
針對於這兩個屬性,也提供了兩個方法進行獲取
image_5bd6634b_364f
 

構造方法

MathContext(int setPrecision, RoundingMode setRoundingMode)
          構造一個新的 MathContext,它具備指定的精度和舍入模式
MathContext(int setPrecision)
          構造一個新的 MathContext,它具備指定的精度和 HALF_UP 舍入模式
調用上一個構造方法
image_5bd6634b_c46
MathContext(String val)
          根據字符串構造一個新的 MathContext
注意:該字符串的格式必須與 toString() 方法生成的字符串的格式相同
不是能夠隨便寫的!!
 

equals

equals方法已經被重寫,對比的是兩個屬性的數值是否相等
image_5bd6634b_7ac0
 
 

toString

注意這個格式能夠用於構造對象
image_5bd6634b_fdf
 

常量

咱們剛纔已經說明,MathContext 就是針對於運算中的一些規則進行描述的類型
對於一些規定,已經內置了幾個靜態對象供咱們使用
static MathContext DECIMAL128
其精度設置與 IEEE 754R Decimal128 格式(即 34 個數字)匹配
舍入模式爲 HALF_EVEN
這是 IEEE 754R 的默認舍入模式
static MathContext DECIMAL32
其精度設置與 IEEE 754R Decimal32 格式(即 7 個數字)匹配
舍入模式爲 HALF_EVEN
這是 IEEE 754R 的默認舍入模式
static MathContext DECIMAL64
其精度設置與 IEEE 754R Decimal64 格式(即 16 個數字)匹配
舍入模式爲 HALF_EVEN
這是 IEEE 754R 的默認舍入模式
static MathContext UNLIMITED
其設置具備無限精度算法所需值的 MathContext 對象
 
image_5bd6634b_59c9
 

總結

RoundingMode  與MathContext 是針對舍入模式以及運算規則的一個抽象
RoundingMode 就是個枚舉
MathContext 他在使用上也能夠理解爲"常量" 同樣的存在
相關文章
相關標籤/搜索