您的位置 首页 java

Java中BigDecimal 类的创建对象方法介绍,常用方法和8种舍入模式

一、 BigDecimal 类的介绍

 * 因为计算机无法精确表示 浮点数 ,所以在进行数字运算时,如果有 double float 类型的浮点数
   参与计算,容易出现计算不准确的情况。
* 在一些对精度要求很高的系统中,需要使用 "BigDecimal" 类来进行精确运行  


二、创建BigDecimal对象的方式


1.使用 构造方法 创建对象


  • BigDecimal( String val) :使用 String类型的数字 作为参数
 BigDecimal b1=new BigDecimal("0.1");
System.out.println(b1); //0.1
  

  • BigDecimal(double val) :使用double类型的数字作为参数(不推荐,容易丢精度)
 BigDecimal b2=new BigDecimal(0.1);
System.out.println(b2); //0.1000000000000000055511151231257827021181583404541015625  


2.使用 静态方法 创建对象


  • BigDecimal.valueOf(double val)
 double d=0.1;
BigDecimal d1=BigDecimal.valueOf(d);
System.out.println(d1);  

Java中BigDecimal 类的创建对象方法介绍,常用方法和8种舍入模式


三、BigDecimal 类的常用方法

  • public BigDecimal add(另一个BigDecimal对象) :加法
 BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.2");
BigDecimal c=a.add(b); //0.3  

  • public BigDecimal subtract (另一个BigDecimal对象) : 减法
 BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.2");
BigDecimal c1=a.subtract(b); //-0.1  

  • public BigDecimal multiply (另一个BigDecimal对象) : 乘法
 BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.2");
BigDecimal c2=a.multiply(b); //0.02  

  • public BigDecimal divide (另一个BigDecimal对象) :除法
 BigDecimal a=new BigDecimal("0.1");
BigDecimal b=new BigDecimal("0.2");
BigDecimal c3=a.divide(b); //0.5
----------------------------------------------------------------------------------------------

//如果除不尽,使用另外重载的方法

BigDecimal adivide=new BigDecimal("10");
BigDecimal bdivide=new BigDecimal("3");
//除数 保留多少位小数  舍入 模式
BigDecimal sum=adivide.divide(bdivide,3, RoundingMode.HALF_UP);
System.out.println(sum); //3.333
//RoundingMode.HALF_UP 表四舍五入  

Java中BigDecimal 类的创建对象方法介绍,常用方法和8种舍入模式

Java中BigDecimal 类的创建对象方法介绍,常用方法和8种舍入模式

  • BigDecimal remainder( BigDecimal b ) : 对两个BigDecimal进行取余
 BigDecimal b1=new BigDecimal("5");
BigDecimal b2=new BigDecimal("2");
System.out.println(b1.remainder(b2)); // 1  

  • BigDecimal negate(BigDecimal b) : 求BigDecimal类型数据的相反数
 BigDecimal n1=new BigDecimal("5");
BigDecimal n2=n1.negate();
System.out.println(n2); //-5  


四、RoundingMode的8种舍入模式介绍

 (1) RoundingMode UP : 舍入模式从零开始;始终在非零丢弃分数之前增加数字 (正数"变大",负数"变小")
                 如: 5.5 -> 6.0               -5.5 -> -6

(2) RoundingMode DOWN : 舍入模式向零舍入; 不要在丢弃的分数之前递增数字(即截断) (正数"变小",负数"变大")
如: 5.5 -> 5                 -5.5 -> -5

(3) RoundingMode CEILING : 圆形模式向正无穷大转弯;
如果结果为正,则表现为RoundingMode.UP ; 如果为负,表现为RoundingMode.DOWN ("全部变大")

如: 5.5 -> 6                    -5.5 -> -5

(4) RoundingMode FLOOR :舍入模式向负无穷大转弯;
如果结果为正,则表现为RoundingMode.DOWN ; 如果为负,表现为RoundingMode.UP ("全部变小")

如: 5.5 -> 5                   -5.5 -> -6

(5) RoundingMode HALF_UP : 四舍五入模式向"最近邻居"转弯,除非两个邻居都是等距的,在这种情况下是圆括弧的
如果丢弃的分数为RoundingMode.UP则表示为RoundingMode.UP ; 否则,表现为RoundingMode.DOWN ("四舍五入")
如: 5.5 -> 6 -2.5 -> -3

(6) RoundingMode HALF_DOWN : 四舍五入模式向"最近邻居"转弯,除非这两个邻居都是等距离的,在这种情况下,这是倒圆的
如果丢弃的分数> 0.5,则表示为RoundingMode.UP ; 否则,表现为RoundingMode.DOWN ("五舍六入")

如: 5.5 -> 5                  -5.5 -> -5

(7) RoundingMode HALF_EVEN : "银行家四舍五入"
(目标是偶数,可以使用四舍五入,也可以适用五舍六入,具体看哪边更接近一个偶数)

如: 5.5 -> 6       -2.5  ->  -2           -5.5  ->  -6

(8) RoundingMode UNNECESSARY :舍入模式来确定所请求的操作具有精确的结果,因此不需要舍入
如果在产生不精确结果的操作上指定了舍入模式,则抛出 Arithmetic Exception

(需要舍掉的位数不是0,就报异常 "ArithmeticException" ; 如果需要舍掉的位数是0,就返回已结舍掉的正常结果)  


作者:今日头条 KJ丶JK /CSDN-KJ.JK

文章来源:智云一二三科技

文章标题:Java中BigDecimal 类的创建对象方法介绍,常用方法和8种舍入模式

文章地址:https://www.zhihuclub.com/169675.shtml

关于作者: 智云科技

热门文章

网站地图