当进行算术运行时,就得用到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
这个其设置具有无限精度算术所需的值