Java中BigDecimal类的使用详解

 更新时间:2020年07月24日 08:55:53   作者:Red_Ant_hoyl  
这篇文章主要介绍了Java中BigDecimal类的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

不论是float 还是double都是浮点数,而计算机是二进制的,浮点数会失去一定的精确度。Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

一、BigDecimal转换取Double数据

假设我们有一个数据是:
Double num = 123456789.98;
我们用java怎么取到这个数值呢。
经过笔者测试:

 Double num = 123456789.98;
    BigDecimal bg1=new BigDecimal(num); 
    BigDecimal bg2=new BigDecimal(num + ""); 
    System.err.println(num);
    System.err.println(bg1);
    System.err.println(bg2);

我们得到:


所以呢,取Double数据的方法是:

 Double num = 123456789.98;
  BigDecimal bg2=new BigDecimal(num + ""); 

二、BigDecimal去掉科学计数法

 java.text.NumberFormat NF = java.text.NumberFormat.getInstance();  
    NF.setGroupingUsed(false);//去掉科学计数法显示
    System.err.println("d:="+NF.format(num));


三、BigDecimal的加法减法乘法除法运算。

常规我们想到的加法:
Double aa = num + num;
System.err.println(aa);
BigDecimal bb =new BigDecimal(aa + "");
System.err.println(bb);

快拿计算机算算,是对的吧。
接下来咱们看,正规一点的写法

BigDecimal b1 = new BigDecimal(Double.toString(num));
  BigDecimal b2 = new BigDecimal(Double.toString(num));
  System.err.println(b1.add(b2).doubleValue());
  BigDecimal cc =new BigDecimal(b1.add(b2).doubleValue()); 
System.err.println(cc);

就测试结果而言呢,还是按照我们常规的想法走吧。
b1.subtract(b2).doubleValue();//减法
b1.multiply(b2).doubleValue();//乘法
b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();//除法
四、接下来,我们测试最后一个乘法
这个精度可能超出了Double的精度,我们减小一下
6789.98 x 6789.98 =46103828.4004
上代码测试:
常规:

Double num = 6789.98;
    Double dd = num * num;
    System.err.println(dd);
    BigDecimal ee =new BigDecimal(dd + "");
    System.err.println(ee);

精确:

Double yysds = 6789.98;
    BigDecimal b1 = new BigDecimal(Double.toString(yysds));
    BigDecimal b2 = new BigDecimal(Double.toString(yysds));
    System.err.println(b1.multiply(b2).doubleValue()); 
    BigDecimal cc =new BigDecimal(b1.multiply(b2).doubleValue()); 
    System.err.println(cc);

上结果

看来涉及小数的计算,还是需要留意的。
其实笔者总结:取Double的值,转化一下。计算的时候就按照常规的方法来计算,只是取值的时候转一下。

到此这篇关于Java中BigDecimal类的使用详解的文章就介绍到这了,更多相关Java中BigDecimal类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java集合与数组区别简介及相互转换实例

    Java集合与数组区别简介及相互转换实例

    这篇文章主要介绍了Java集合与数组区别简介及相互转换实例,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Java中将List拆分为多个小list集合的实现代码

    Java中将List拆分为多个小list集合的实现代码

    这篇文章主要介绍了Java中如何将List拆分为多个小list集合,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • rabbitmq五种模式详解(含实现代码)

    rabbitmq五种模式详解(含实现代码)

    这篇文章主要介绍了rabbitmq五种模式详解(含实现代码),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 一文让你彻底学会Java左移、右移操作

    一文让你彻底学会Java左移、右移操作

    这篇文章主要介绍了了Java中的位运算符,包括左移(<<)、右移(>>)和无符号右移(>>>),左移将数字的二进制位向左移动,相当于乘以2的n次方;右移将数字的二进制位向右移动,保留符号位,相当于除以2的n次方,文中介绍的非常详细,需要的朋友可以参考下
    2025-02-02
  • Java Spring boot 2.0 跨域问题的解决

    Java Spring boot 2.0 跨域问题的解决

    本篇文章主要介绍了Java Spring boot 2.0 跨域问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Java PreparedStatement用法详解

    Java PreparedStatement用法详解

    这篇文章主要介绍了Java PreparedStatement用法详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 解决IDEA target文件夹越来越大的问题

    解决IDEA target文件夹越来越大的问题

    这篇文章主要介绍了解决IDEA target文件夹越来越大的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • idea常用配置之注释快捷键方式

    idea常用配置之注释快捷键方式

    这篇文章主要介绍了idea常用配置之注释快捷键方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 深入理解Java编程中异常处理的优劣

    深入理解Java编程中异常处理的优劣

    本篇文章是对Java编程中异常处理的优劣进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Spring Boot和Hazelcast使用详解

    Spring Boot和Hazelcast使用详解

    这篇文章主要介绍了Spring Boot和Hazelcast使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09

最新评论