java中bigdecimal相乘_Java中的Bigdecimal类型运算

  • 作者: 凯哥Java(公众号:凯哥Java)
  • 工作小总结
  • 时间:2022-03-09 18:04
  • 3027人已阅读
简介 双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。构造器 描述BigDecimal(int)创建一个具有参数所指定整数值的对象。BigDecimal(double)创建一

🔔🔔🔔好消息!好消息!🔔🔔🔔

有需要的朋友👉:联系凯哥 微信号 kaigejava2022

双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。Java在java.math包中提 供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。表5.7中列出了BigDecimal类的主要构造器和方法。


构造器  描 述


BigDecimal(int)创建一个具有参数所指定整数值的对象。


BigDecimal(double)创建一个具有参数所指定双精度值的对象。


BigDecimal(long)创建一个具有参数所指定长整数值的对象。


BigDecimal(String)创建一个具有参数所指定以字符串表示的数值的对象。


方 法描 述


add(BigDecimal)BigDecimal对象中的值相加,然后返回这个对象。


subtract(BigDecimal)BigDecimal对象中的值相减,然后返回这个对象。


multiply(BigDecimal)BigDecimal对象中的值相乘,然后返回这个对象。


divide(BigDecimal)BigDecimal对象中的值相除,然后返回这个对象。


toString()将BigDecimal对象的数值转换成字符串。


doubleValue()将BigDecimal对象中的值以双精度数返回。


floatValue()将BigDecimal对象中的值以单精度数返回。


longValue()将BigDecimal对象中的值以长整数返回。


intValue()将BigDecimal对象中的值以整数返回。


注意,由于一般数值类型,例如double,不能准确地代表16位有效数以上的数字,在使用BigDecimal时,应用 BigDecimal(String)构造器创建对象才有意义。另外,BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算 符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。


eg:


两个BigDecimal  类型的数据相乘:


BigDecimal   a   =   new   BigDecimal(15124);


BigDecimal   b   =   new   BigDecimal(15124);


BigDecimal   c   =   a.multiply(b);

————————————————


原文链接:https://blog.csdn.net/weixin_33050117/article/details/114615363




在项目中经常会用到小数的一些计算,而float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确。所以有时候必须要采用BigDecimal。


public class Demo {

   public static void main(String[] args) {

  BigDecimal a =null;

  Integer faultRate = 6;

  a = BigDecimal.valueOf(faultRate.doubleValue()/3);

  BigDecimal  b =a.setScale(2, RoundingMode.HALF_UP);//保留两位小数

  System.out.println("结果是"+b);

  //下面将结果转化成百分比

  NumberFormat percent = NumberFormat.getPercentInstance();

       percent.setMaximumFractionDigits(2);



       System.out.println(percent.format(b.doubleValue()));

  

}

}


运行结果是:

9ef99beb8b3b4cb85343f20ab502541f.png


BigDecimal.setScale()方法用于格式化小数点

setScale(1)表示保留一位小数,默认用四舍五入方式 

setScale(1,BigDecimal.ROUND_DOWN)直接删除多余的小数位,如2.35会变成2.3 

setScale(1,BigDecimal.ROUND_UP)进位处理,2.35变成2.4 

setScale(1,BigDecimal.ROUND_HALF_UP)四舍五入,2.35变成2.4


setScaler(1,BigDecimal.ROUND_HALF_DOWN)四舍五入,2.35变成2.3,如果是5则向下舍


setScaler(1,BigDecimal.ROUND_CEILING)接近正无穷大的舍入


setScaler(1,BigDecimal.ROUND_FLOOR)接近负无穷大的舍入,数字>0和ROUND_UP作用一样,数字<0和ROUND_DOWN作用一样


setScaler(1,BigDecimal.ROUND_HALF_EVEN)向最接近的数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。



 

注释:

1:scale指的是你小数点后的位数。比如123.456则score就是3.

score()就是BigDecimal类中的方法啊。

比如:BigDecimal b = new BigDecimal("123.456");

b.scale(),返回的就是3.

2:roundingMode是小数的保留模式。它们都是BigDecimal中的常量字段,有很多种。

比如:BigDecimal.ROUND_HALF_UP表示的就是4舍5入。

3:pubilc BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

的意思是说:我用一个BigDecimal对象除以divisor后的结果,并且要求这个结果保留有scale个小数位,roundingMode表示的就是保留模式是什么,是四舍五入啊还是其它的,你可以自己选!

4:对于一般add、subtract、multiply方法的小数位格式化如下:


BigDecimal mData = new BigDecimal("9.655").setScale(2, BigDecimal.ROUND_HALF_UP);

        System.out.println("mData=" + mData);

----结果:----- mData=9.66



————————————————

版权声明:本文为CSDN博主「小盒子_spring」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/m0_37044606/article/details/76461569


TopTop