java中BigDecimal类型比较大小和绝对值计算方式

 更新时间:2023年07月13日 16:11:46   作者:别团等shy哥发育  
这篇文章主要介绍了java中BigDecimal类型比较大小和绝对值计算方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

BigDecimal类型比较大小和绝对值计算

涉及到BigDecimal类型的比较,最好使用compareTo()方法,不要用equals()方法(除非对精度有要求)。

关键方法

修饰符方法描述
BigDecimalcompareTo(BigDecimal val)将此 BigDecimal与指定的BigDecimal进行 比较,小于返回-1,等于返回0,大于返回1

代码测试

import java.math.BigDecimal;
//临时测试类
public class CalculateTest {
    private static BigDecimal X=new BigDecimal("0.4");
    private static BigDecimal Y=new BigDecimal("0.5");
    private static BigDecimal Z=new BigDecimal("0.6");
    private static BigDecimal T=new BigDecimal("0.4");
    public static void main(String[] args) {
        System.out.println(X.compareTo(Y));
        System.out.println(Y.compareTo(X));
        System.out.println(X.compareTo(T));
        if(X.compareTo(Y)==-1){ //小于
            System.out.println(X+"小于"+Y);
        }
        if(Y.compareTo(X)==1){  //大于
            System.out.println(Y+"大于"+X);
        }
        if(X.compareTo(T)==0){  //等于
            System.out.println(X+"等于"+T);
        }
        if(Z.compareTo(Y)>-1){//大于等于
            System.out.println(Z+"大于等于"+Y);
        }
        if(X.compareTo(Y)<1){//小于等于
            System.out.println(X&#43;&#34;小于等于&#34;&#43;Y);
        }
        //BigDecimal绝对值计算
        System.out.println(X.subtract(Y).abs());
    }
}

运行结果:

-1
1
0
0.4小于0.5
0.5大于0.4
0.4等于0.4
0.6大于等于0.5
0.4小于等于0.5
0.1

将equals()方法和compareTo()作比较

    BigDecimal a&#61;new BigDecimal(&#34;0.1&#34;);
        BigDecimal b&#61;new BigDecimal(&#34;0.100&#34;);
        System.out.println(a.equals(b));
        System.out.println(a.compareTo(b));

运行结果:

false
0

我们发现两个的数值是一样的,只是精度不同,equals方法判断不相等,但是compareTo方法判断结果为相等,所以equals方法会考虑精度,但compareTo方法不会。

常用的BigDecimal的定义和用法

最近涉及到浮点数金额的一个运算,为了不失精度,想到了之前刷题用过的BigDecimal,也借此对它进行一个简单的复习。

Java在java.math包中提供的API类BigDecimal对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中用java.math.BigDecimal更为精准。

BigDecimal创建的是对象,我们不能使用传统的 +、-、*、/ 等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。

BigDecimal在计算中体现出来的精准度

BigDecimal的用法:

1.BigDecimal有4个构造方法

  • BigDecimal(int) 创建一个具有参数所指定整数值的对象。
  • BigDecimal(double) 创建一个具有参数所指定双精度值的对象。(不建议采用)
  • BigDecimal(long) 创建一个具有参数所指定长整数值的对象。
  • BigDecimal(String) 创建一个具有参数所指定以字符串表示的数值的对象(优先级最高)

2.BigDecimal常用的加减乘除运算

public BigDecimal add(BigDecimal value);  //加法
public BigDecimal subtract(BigDecimal value);  //减法
public BigDecimal multiply(BigDecimal value);  //乘法
public BigDecimal divide(BigDecimal value); //除法

3.BigDecimal常用的比较大小方法

(int compareTo(Object o)):

BigDecimal的equals方法当精度不一样的时候也当做不相等,而compareTo方法却可以忽略精度的不同,只比较数值是否相同。

BigDecimal的compareTo()方法进行的是值比较,返回值为-1,0,1:

  • num1<num2, 返回-1
  • num1=num2,返回0
  • num1>num2, 返回1

4.在java中判断一个BigDecimal的值和0比较

int i=num.compareTo(BigDecimal.ZERO);

根据 i 的值是 -1 or 0 or 1,即可判断 小于 or 等于 or 大于关系

boolean flag = num.equals(BigDecimal.ZERO)

直接根据 flag 的 true、false 进行判断

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Security常用过滤器实例解析

    Spring Security常用过滤器实例解析

    这篇文章主要介绍了Spring Security常用过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Apache Commons BeanUtils: JavaBean操作方法

    Apache Commons BeanUtils: JavaBean操作方法

    这篇文章主要介绍了Apache Commons BeanUtils: JavaBean操作的艺术,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • java实现基于UDP协议的聊天小程序操作

    java实现基于UDP协议的聊天小程序操作

    UDP是与TCP相对应的协议,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高,本文给大家介绍java实现基于UDP协议的聊天小程序操作,感兴趣的朋友一起看看吧
    2021-10-10
  • Spring Security实现不同接口安全策略方法详解

    Spring Security实现不同接口安全策略方法详解

    这篇文章主要介绍了Spring Security实现不同接口安全策略方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • 详解SpringBoot依赖注入和使用配置文件

    详解SpringBoot依赖注入和使用配置文件

    这篇文章主要介绍了SpringBoot依赖注入和使用配置文件的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • SpringBoot整合Redis正确的实现分布式锁的示例代码

    SpringBoot整合Redis正确的实现分布式锁的示例代码

    这篇文章主要介绍了SpringBoot整合Redis正确的实现分布式锁的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 详解基于java的Socket聊天程序——初始设计(附demo)

    详解基于java的Socket聊天程序——初始设计(附demo)

    本篇文章主要介绍了Socket聊天程序——初始设计(附demo),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • springboot整合curator实现分布式锁过程

    springboot整合curator实现分布式锁过程

    这篇文章主要介绍了springboot整合curator实现分布式锁过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • SpringBoot集成tensorflow实现图片检测功能

    SpringBoot集成tensorflow实现图片检测功能

    TensorFlow名字的由来就是张量(Tensor)在计算图(Computational Graph)里的流动(Flow),它的基础就是前面介绍的基于计算图的自动微分,本文将给大家介绍Spring Boot集成tensorflow实现图片检测功能,需要的朋友可以参考下
    2024-06-06
  • 基于mybatis进行批量更新两种方法

    基于mybatis进行批量更新两种方法

    这篇文章主要给大家介绍了关于如何基于mybatis进行批量更新的两种方法,批量更新的使用,mybatis中批量更新有很多种方法,可以把数据一条条更新,也可以传入一个数据集一次性更新,需要的朋友可以参考下
    2023-08-08

最新评论