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

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

一、BigDecimal 类的介绍

      * 因为计算机无法精确表示浮点数,所以在进行数字运算时,如果有double或float类型的浮点数
        参与计算,容易出现计算不准确的情况。

      * 在一些对精度要求很高的系统中,需要使用 "BigDecimal" 类来进行精确运行。

二、创建BigDecimal对象的方式

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

     (1)BigDecimal(String val) :使用 String类型的数字 作为参数

            BigDecimal b1=new BigDecimal("0.1");
            System.out.println(b1);    //0.1

     (2)BigDecimal(double val) :使用 double类型的数字 作为参数。(不推荐,容易丢精度)

         BigDecimal b2=new BigDecimal(0.1); 
         System.out.println(b2);   //0.1000000000000000055511151231257827021181583404541015625

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

     (1)BigDecimal.valueOf(double val)

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

在这里插入图片描述


三、BigDecimal 类的常用方法

     (1)public BigDecimal add(另一个BigDecimal对象) :加法

            BigDecimal  a=new BigDecimal("0.1");
            BigDecimal  b=new BigDecimal("0.2");
            BigDecimal c=a.add(b);              //0.3

     (2)public BigDecimal subtract (另一个BigDecimal对象) : 减法

            BigDecimal  a=new BigDecimal("0.1");
            BigDecimal  b=new BigDecimal("0.2");
            BigDecimal c1=a.subtract(b);          //-0.1

     (3)public BigDecimal multiply (另一个BigDecimal对象) : 乘法

            BigDecimal  a=new BigDecimal("0.1");
            BigDecimal  b=new BigDecimal("0.2");
            BigDecimal c2=a.multiply(b);           //0.02

     (4)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 表四舍五入

在这里插入图片描述

在这里插入图片描述


     (5) BigDecimal remainder( BigDecimal b ) : 对两个BigDecimal进行取余

           BigDecimal   b1=new BigDecimal("5");
           BigDecimal   b2=new BigDecimal("2");
           System.out.println(b1.remainder(b2));   // 1

     (6)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 :舍入模式来确定所请求的操作具有精确的结果,因此不需要舍入 
               如果在产生不精确结果的操作上指定了舍入模式,则抛出ArithmeticException          
               
         (需要舍掉的位数不是0,就报异常 "ArithmeticException" ; 如果需要舍掉的位数是0,就返回已结舍掉的正常结果)

作者:KJ.JK

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。
文章对你有所帮助的话,欢迎给个赞或者 star ,你的支持是对作者最大的鼓励,不足之处可以在评论区多多指正,交流学习呀

目录
相关文章
|
1月前
|
Java 开发者
在 Java 中,一个类可以实现多个接口吗?
这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
143 57
|
2天前
|
JSON Java Apache
Java基础-常用API-Object类
继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
49 8
|
27天前
|
Java
Java项目中高精度数值计算:为何BigDecimal优于Double
在Java项目开发中,涉及金额计算、面积计算等高精度数值操作时,应选择 `BigDecimal` 而非 `Double`。`BigDecimal` 提供任意精度的小数运算、多种舍入模式和良好的可读性,确保计算结果的准确性和可靠性。例如,在金额计算中,`BigDecimal` 可以精确到小数点后两位,而 `Double` 可能因精度问题导致结果不准确。
|
1月前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
73 17
|
1月前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
1月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
131 4
|
1月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
76 2
|
1月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
58 4
|
1月前
|
Java Android开发
Eclipse 创建 Java 类
Eclipse 创建 Java 类
27 0