Java BigDecimal类型的 加减乘除运算及扩展

Posted 格子衫111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java BigDecimal类型的 加减乘除运算及扩展相关的知识,希望对你有一定的参考价值。

Java BigDecimal 类型的加减乘除运算不能直接用相关运算符号(如:+,-,*,/),需要调用方法,方法如下:

加法:add

减法:subtract

乘法:multiply

除法:divide

示例代码:

BigDecimal num1 = new BigDecimal("8"); 

BigDecimal num2 = new BigDecimal("2"); 

BigDecimal num3 = null; 

//加法 

num3 =  num1.add(num2);      

System.out.println("求和:" + bignum3);  //10

//减法

num3 = num1.subtract(num2); 

System.out.println("求差:" + num3);  //6

//乘法 

num3= num1.multiply(num2); 

System.out.println("乘法积:" + num3);  //16

//除法  注意:当不整除,出现无限循环小数时,会抛异常  

num3 = num1.divide(num2); 

System.out.println("除法结果:" + num3);  //4

 

扩展:

1. 两个数比较大小,可以使用 compareTo 方法

如:int  result=  num1.compareTo(num2);    

 返回的结果是int类型

  • 结果为1: 表示num1 大于 num2;
  • 结果为-1:表示num1 小于 num2;
  • 结果为0: 表示num1 等于 num2

 

2.在进行除法运算时,可能会除不尽,这时应指明保留几位小数。

如:num3 =  num1.divide(new BigDecimal(1.13),2,BigDecimal.ROUND_HALF_UP);

这里有3个参数,意义如下:

  • 参数1:BigDecimal类型,表示除数,8/1.13,这个参数值就是1.13;
  • 参数2:int 类型,表示小数点后保留几位小数,这里是2,就是保留两位小数;
  • 参数3:int类型,表示舍入模式,BigDecimal 提供了几种常量值。

BigDecimal 提供的舍入模式(roundingMode)介绍:

ROUND_CEILING: 舍位时往正无穷方向移动  

举例:1.1->2   1.5->2   1.8->2   -1.1->-1   -1.5->-1   -1.8->-1   

ROUND_DOWN: 向0的方向移动

举例:1.1->1   1.5->1   1.8->1   -1.1->-1   -1.5->-1   -1.8>-1   

ROUND_FLOOR与CEILING相反,往负无穷  

举例:1.1->1   1.5->1   1.8->1   -1.1->-2   -1.5->-2   -1.8->-2   

ROUND_HALF_DOWN以5为分界线,五舍六入

举例:1.5->1   1.6->1   -1.5->-1   -1.6->-2  1.15->1.1   1.16->1.2  1.55->1.5  1.56->1.6

ROUND_HALF_EVEN同样以5为分界线,如果是5,则前一位变偶数

举例:1.15->1.2   1.16->1.2   1.25->1.2   1.26->1.3   

ROUND_HALF_UP: 最常见的四舍五入   

ROUND_UNNECESSARY: 无需舍位   

ROUND_UP: 与ROUND_DOWN相反,远离0的方向

举例:1.1->2   1.5->2   1.8->2   -1.1->-2   -1.5->-2   -1.8->-2

 

3.当进行加减乘运算时,也可以通过 setScale 方法设置精度

如:num3 =  num1.multiply(new BigDecimal(0.345),2,BigDecimal.ROUND_HALF_UP);

以上表示,num1 乘以 0.345 后,结果 num3 保留两位小数,并采用四舍五入模式。

 

4.BigDecimal取其中最大、最小值、绝对值、相反数

  •  num1.max (num2)  //比较取最大值 
  •     num1.min(num2)  //比较取最小值 
  •     num1.abs()    //取最绝对值 
  •     num1.negate()   //取相反数 

 

以上是关于Java BigDecimal类型的 加减乘除运算及扩展的主要内容,如果未能解决你的问题,请参考以下文章

java中bigdecimal 类型的变量怎么相互加减乘除

java BigDecimal实现精确加减乘除运算

Java 避免精度丢失之BigDecimal 运算

BigDecimal 详细解析

java工具类-BigDecimal

java的bigdecimal类的用法