[十五]java.math包簡介,RoundingMode與MathContext
阿新 • • 發佈:2018-12-18
java.math包提供了java中的數學類
包括基本的浮點庫、複雜運算以及任意精度的資料運算
'可以看得到,主要包括三個類一個列舉
BigDecimal和BigInteger接下來會詳細介紹
先說下另外兩個
舍入模式
HALF_UP/ HALF_DOWN / HALF_DOWN 都是最接近數字舍入
不過如果兩個相鄰的數字距離相等,將會採取不同的模式
HALF_UP就是平時的四捨五入
RoundingMode
舍入行為/ 近似模式 對於很多計算,都可能涉及到精度的問題 比如兩個數進行除法, 十進位制下,1/3 結果為無限迴圈小數 顯然計算機中不可能儲存這個無限迴圈的小數,那麼這個 0.3333333...... 你到底要近似成為多少? 0? 0.5? 0.33? 1? RoundingMode 就是這麼一個存在 如同它的名字一樣,近似模式 為可能丟棄精度的數值操作指定一種舍入行為舍入模式
UP | 遠離零方向舍入 |
DOWN | 向零方向舍入 |
CEILING | 向正無限大方向舍入 |
FLOOR | 向負無限大方向舍入 |
HALF_UP | 向最接近數字方向舍入 如果與兩個相鄰數字的距離相等,則向上舍入 |
HALF_DOWN | 向最接近數字方向舍入 如果與兩個相鄰數字的距離相等,則向下舍入 |
HALF_EVEN | 向最接近數字方向舍入 如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入 |
UNNECESSARY |
用於斷言的舍入模式 請求的操作具有精確的結果,不需要進行舍入 |
示例
擁有靜態的valueOf方法,對BigDecimal中的常量,進行對映轉換 返回RoundingMode物件 這個enum 是打算用來替代 BigDecimal中的舍入模式常量 (BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 等) 所以後續寫程式碼使用這個列舉MathContext
計算上下文/數學規則 RoundingMode 是舍入模式的抽象描述,僅僅描述了舍入的規則 但是運算中還有一些其他的規則,比如 保留幾位有效數字? MathContext則是針對於計算的更進一步抽象 是封裝上下文設定的不可變物件,它描述數字運算子的某些規則 他擁有兩個屬性 precision:某個操作使用的數字個數;結果舍入到此精度 roundingMode:一個 RoundingMode 物件,該物件指定舍入使用的演算法 針對於這兩個屬性,也提供了兩個方法進行獲取構造方法
equals
equals方法已經被重寫,對比的是兩個屬性的數值是否相等toString
注意這個格式可以用於構造物件常量
我們剛才已經說明,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 物件 |