欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-01-11 22:55:29
本文对java.math包中的RoundingMode与MathContext进行了简单的介绍,包括RoundingMode的含义,使用方法,MathContext的使用方法以及常量属性 ......
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 他在使用上也可以理解为"常量" 一样的存在