关于DigDecimal的使用

当进行算术运行时,就得用到BigDecimal类
用法:比如1/3

BigDecimal number=new BigDecimal(1).divide(new BigDecimal(3),2, RoundingMode.HALF_EVEN);
        System.out.println(number);

在BigDecimal类的实现对象中要运算就得以BigDecimal类的实现对象形式存在,就是被除数和除数都是BigDecimal类的实现对象
当执行除法时,它会要求你精确到小数点后几位,上面的2的位置就是。
它还有一个确认模式就是上面的RoundingMode.HALF_EVEN,说简单点就是当精确到几位时是要将后面的舍去,还是进一,这样的一套规则。
RoundingMode是一个公共的枚举类

Enum Constant描述
CEILING向正无穷大
DOWN向零舍入
FLOOR负无穷大
HALF_DOWN“最近邻居”舍入,除非两个邻居是等距的,在这种情况下舍入向下
HALF_EVEN圆周向“最近的邻居” ,除非两个邻居的距离相等,在这种情况下,圆周向偶数邻居
HALF_UP“最近的邻居”舍入 ,除非两个邻居的距离相等,在这种情况舍入向上
UNNECESSARY断言所请求的操作有一个精确的结果,不需要舍入
UP舍入模式从零舍入

本人在用这个类的对象进行乘法运算时出现以下这一幕

BigDecimal number=new BigDecimal(0.55).multiply(new BigDecimal(100));
        System.out.println(number);

结果显示为

55.0000000000000044408920985006261616945266723632812500

乘法中有两个方法一个是参数,这个参数也是BigDecimal类的对象

用这个方法但用解决上面的问题直接用除法就是除以1

另外一个就是BigDecimal类的对象,MathContext的对象
MathContext是一个类来的哦

MathContext​(int setPrecision)
构建一个新的MathContext ,以指定的精确度及HALF_UP rounding mode. 舍入方式
看见这种舍入模式没有
MathContext​(int setPrecision, RoundingMode setRoundingMode)
构建一个新的MathContext , 以指定的精确度及舍入方式修整

MathContext​(String val)
从一个格式为mathcontext的字符串创建

这个MathContext类就是用来规范其有效的数字的个数,以及其舍入的
有效数字就是指小数号前数字和小数号后之前,如果小数号前一位为0的话不算,就只能算小数号后面的如0.333有效位是3

BigDecimal number=new BigDecimal(1).divide(new BigDecimal(3),new MathContext(5));

MathContext类与 RoundingMode类经常交替使用,如果是经常性使用 HALF_UP模式的话完全可以用MathContext类匿名对象来用
MathContext类还有一些静态属性这些属性能够快速的帮助我实现规范

static MathContext	DECIMAL128	
这个有效个数为34位,使用的是 HALF_EVEN模式
static MathContext	DECIMAL32	
这个有效个数为7位使用的是HALF_EVEN模式
static MathContext	DECIMAL64	
这个有效个数为16位,使用的是 HALF_EVEN模式
static MathContext	UNLIMITED	
这个其设置具有无限精度算术所需的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值