首页 > 其他分享 > BigDecimal 用法总结

BigDecimal 用法总结

时间:2022-10-10 01:00:52浏览次数:63  
标签:总结 BigDecimal 对象 System 用法 println ROUND out

转载请注明出处:

目录   1.BigDecimal 简介   2.构造BigDecimal的对象   3.常用方法总结   4.divide方法使用   5.setScale 方法使用   6.BigDecimal 数据库存储类型对应 decimal

1.BigDecimal 简介

  在进行浮点数 long 或 double 类型的运算时,如果直接进行运算,浮点数的运算会出现精度失准的情况,特别是在计算和金额相关的运算时,必须计算精确,不能出现误差,BigDecimal 的出现就是为了解决 浮点数类型的运算精度失准的场景;

  示例:

    public static void main(String[] args) {
        System.out.println(0.2+0.1);
        System.out.println(0.3-0.1);
        System.out.println(0.2*0.1);
        System.out.println(0.3/0.1);
    }

  运行后的结果如下:

                              

2.构造BigDecimal的对象

  BigDecimal提供了丰富的构造函数,可以通过int、long、double、String等来构造一个BigDecimal对象。

  但是,使用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。

BigDecimal bg = new BigDecimal(1.1);
System.out.println(bg.toString());
 
运行结果:
1.100000000000000088817841970012523233890533447265625

   所以,通常情况下,我们会使用String对象作为参数来构造一个精确的BigDecimal对象。 下面提供的三种方法都是可以的:

//方法一
BigDecimal bg1 = new BigDecimal("1.1");
//方法二
BigDecimal bg2 = new BigDecimal(Double.toString(1.1));
//方法三
BigDecimal bg3 = BigDecimal.valueOf(1.1);
 
System.out.println(bg1.toString());
System.out.println(bg2.toString());
System.out.println(bg3.toString());
 
运行结果:
1.1
1.1
1.1

3.常用方法总结

  • add(BigDecimal): BigDecimal对象中的值相加,返回BigDecimal对象

  • subtract(BigDecimal): BigDecimal对象中的值相减,返回BigDecimal对象

  • multiply(BigDecimal): BigDecimal对象中的值相乘,返回BigDecimal对象

  • divide(BigDecimal): BigDecimal对象中的值相除,返回BigDecimal对象

  • toString(): 将BigDecimal对象中的值转换成字符串

  • doubleValue(): 将BigDecimal对象中的值转换成双精度数

  • floatValue(): 将BigDecimal对象中的值转换成单精度数

  • longValue(): 将BigDecimal对象中的值转换成长整数

  • intValue(): 将BigDecimal对象中的值转换成整数

  • a.max (b) 比较取最大值

  • a.min(b) 比较取最小值

  • a.abs() 取最绝对值

  • negate(): 取相反数

  • (BigDecimal).compareTo(BigDecimal2) : 比较两个BigDecimal 对象的大小; 返回值为-1,表示bigdemical小于bigdemical2; 返回值为 0,表示bigdemical等于bigdemical2; a = 1,表示bigdemical大于bigdemical2;

4.divide方法使用

  BigDecimal中的divide主要就是用来做除法的运算。 方法定义如下:

public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)

  第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。 第三个参数可以使用如下常量配置:

BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2

BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3

BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4

BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3

后边两种的区别就是如果保留的位数的后一位如果正好是5的时候,一个舍弃掉,一个进位。

  进行除法运算,并四舍五入

System.out.println(new BigDecimal("2322").divide(new BigDecimal("209.123345456667"),2, BigDecimal.ROUND_HALF_UP));

  执行结果为 :11.10

5.setScale 方法使用

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

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则向下舍

  示例:

double dou = 3.14789;
//BigDecimal.ROUND_UP 四舍五入
//BigDecimal.ROUND_DOWN 直接舍弃保留位数之后小数
BigDecimal bigDecimal = new BigDecimal(dou).setScale(2, BigDecimal.ROUND_DOWN);
double newDouble = bigDecimal.doubleValue();
System.out.println("newDouble:" + newDouble);

   注: 1、BigDecimal.ROUND_UP 四舍五入,BigDecimal.ROUND_DOWN 直接舍弃保留位数之后小数; 2、位数不够时,不会补齐

6.BigDecimal 数据库存储类型对应 decimal

  BigDecimal 数据保存在 Mysql 的时候,可以使用 decimal 的数据库数据类型

  decimal(m,d)

  m是数字的最大位数,他的范围是从1-65;

  d是小数点后的位数,他的范围是0-30,并且不能大于m。

   如果m被省略了,那么m的值默认为10,

   如果d被省略了,那么d的值默认为0.

  举例表示:

    1、decimal(5,2) 所指代的范围是-999.99~999.99 数字的最大位数是5位,小数点右侧是2位,即有两位小数。

    2、decimal(7,6)所指代的范围是-9.999999~9.999999 数字的最大位数是7位,小数点右侧是6位,即有六位小数。

 

 

 

标签:总结,BigDecimal,对象,System,用法,println,ROUND,out
From: https://www.cnblogs.com/zjdxr-up/p/16774249.html

相关文章

  • 三周十四组总结
    本周我们学习了循环和分支结构,循环分为if-else循环,for循环,switch循环,while循环,do-while循环其中if-else循环有两种表达式第一种格式if(表达式)语句1;else语句2;第二种格......
  • 每周总结
    这周测试了Hive的数据分析,将样表的数据导入到HIVE的数据仓库中。并进行了数据清洗,将day_id一列的数值清洗为真实的日期格式。进行数据分信息处理,就是进行不同条件的查询,......
  • 2022-2023-1 20221312 《计算机基础与程序设计》第六周学习总结
    作业信息班级链接:首页-2022-2023-1-计算机基础与程序设计-北京电子科技学院-班级博客-博客园(cnblogs.com)作业要求:2022-2023-1《计算机基础与程序设计》教学......
  • 03@shell数据类型及变量值的操作总结
    文章目录​​基本数据类型与值操作​​​​一、数据类型介绍​​​​1、什么是数据​​​​2、编程语言划分(shell的划分)​​​​二、基本数据类型​​​​1、数字​​​​......
  • 2022-2023-1 20221320 《计算机基础与程序设计》第六周学习总结
    学期(2022-2023-1)学号(20221320)《计算机基础与程序设计》第六周学习总结班级的链接https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP/作业要求的链接https://www.cn......
  • 2022-2023-1 20221326《计算机基础与程序设计》第六周学习总结
    班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06作业目标:Polya如何解决问题,简单类型与组......
  • 2022-2023-1 20221308 《计算机基础与程序设计》第6周学习总结
    这个作业属于哪个课程:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP这个作业要求在哪里:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05作业目标:学习计......
  • 李群学习总结
    在B站上看到一个讲得挺全面的视频教程为什么引入李群流形我觉得讲得挺好,做一下知识点总结。群属于一种代数结构,即拥有set和operation。而流形属于几何拓扑的概念,可......
  • Java中StringBuffer的获取当前容量的方法capacity的用法
    我们都知道,java中字符串都是用String,内容和长度都是不可变的。如果想使用可变长度的,可以使用类StringBuffer该类的方法是安全的,可以保证线程安全   使用的过程中学......
  • 2022-2023 20221319《计算机基础与程序设计》第六周学习总结
    作业信息这个作业属于那个班级:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP作业要求:https://www.cnblogs.com/rocedu/p/9577842.html#WEEK06作业目标:《计算......