[十五]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 他在使用上也可以理解为"常量" 一样的存在

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值