您的位置:首页 > 编程语言 > Java开发

[十五]java.math包简介,RoundingMode与MathContext

2018-10-29 09:38 666 查看
java.math包提供了java中的数学类 包括基本的浮点库、复杂运算以及任意精度的数据运算   '可以看得到,主要包括三个类一个枚举 BigDecimal和BigInteger接下来会详细介绍 先说下另外两个  

RoundingMode

舍入行为/ 近似模式
  对于很多计算,都可能涉及到精度的问题 比如两个数进行除法, 十进制下,1/3  结果为无限循环小数 显然计算机中不可能保存这个无限循环的小数,那么这个 0.3333333...... 你到底要近似成为多少? 0?  0.5? 0.33? 1? RoundingMode 就是这么一个存在 如同它的名字一样,近似模式 为可能丢弃精度的数值操作指定一种舍入行为

舍入模式

UP 远离零方向舍入
DOWN 向零方向舍入
CEILING 向正无限大方向舍入
FLOOR 向负无限大方向舍入
HALF_UP 向最接近数字方向舍入
如果与两个相邻数字的距离相等,则向上舍入
HALF_DOWN 向最接近数字方向舍入
如果与两个相邻数字的距离相等,则向下舍入
HALF_EVEN 向最接近数字方向舍入 如果与两个相邻数字的距离相等,则向相邻的偶数舍入
HALF_UP/ HALF_DOWN /  HALF_DOWN  都是最接近数字舍入 不过如果两个相邻的数字距离相等,将会采取不同的模式 HALF_UP就是平时的四舍五入    
UNNECESSARY 用于断言的舍入模式
请求的操作具有精确的结果,不需要进行舍入
 

示例

  拥有静态的valueOf方法,对BigDecimal中的常量,进行映射转换 返回RoundingMode对象   这个enum 是打算用来替代 BigDecimal中的舍入模式常量 (BigDecimal.ROUND_UP、BigDecimal.ROUND_DOWN 等) 所以后续写代码使用这个枚举  

MathContext

计算上下文/数学规则 RoundingMode 是舍入模式的抽象描述,仅仅描述了舍入的规则 但是运算中还有一些其他的规则,比如 保留几位有效数字? MathContext则是针对于计算的更进一步抽象 是封装上下文设置的不可变对象,它描述数字运算符的某些规则 他拥有两个属性 precision:某个操作使用的数字个数;结果舍入到此精度 roundingMode:一个 RoundingMode 对象,该对象指定舍入使用的算法 针对于这两个属性,也提供了两个方法进行获取  

构造方法

MathContext(int setPrecision, RoundingMode setRoundingMode)           构造一个新的 MathContext,它具有指定的精度和舍入模式
MathContext(int setPrecision)           构造一个新的 MathContext,它具有指定的精度和 HALF_UP 舍入模式 调用上一个构造方法
MathContext(String val)           根据字符串构造一个新的 MathContext 注意:该字符串的格式必须与 toString() 方法生成的字符串的格式相同
不是可以随便写的!!
 

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 对象
   

总结

RoundingMode  与MathContext 是针对舍入模式以及运算规则的一个抽象 RoundingMode 就是个枚举 MathContext 他在使用上也可以理解为"常量" 一样的存在      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: