BigDecimal类型两数差和某个值进行比较

开发项目的过程中遇到了一个Bigdecimal的问题,看似很低级,但是确实难到我了😂,记录一下。需求如下:

需求

判断两个BigDecimal类型的数值谁大。

  • 如果两个值相等条件成立
  • 如果 两数上下相差0.1 也成立

常规判断

BigDecimal类型比较特殊,假设我们有以下两个BigDecimal字段,比较两个值谁大谁小,可以发现他是编译报错的,会提示编译报错信息:Operator '>' cannot be applied to 'java.math.BigDecimal', 'java.math.BigDecimal' 就是说 **操作符 > 不能应用于 java.math.BigDecimal 类型。
在这里插入图片描述
那既然不能使用 > 我们怎么判断谁大谁小嘞。我们可以使用 compareTo

compareTo方法的作用是BigDecimal大小的比较。两个值比较,最终返回的是一个int类型数字,而不是true和false。

一般两个值比较的时候无非就是三大种情况,大于、小于、等于,与之对应的是 1 、-1、 0。

  • 大于 = 1
  • 小于 = -1
  • 于 = 0

具体的使用方法可以参考这篇文章:https://blog.csdn.net/chenHaiJaheike/article/details/107516390?spm=1001.2014.3001.5501

弊端

虽然使用 compareTo 去判断两个BigDecimal值谁大谁小但是有这种需求是不满足的,假如:要判断两个BigDecimal上下相差某个金额的时候是无法做出判段的。

public static void main(String[] args) {
    BigDecimal a = new BigDecimal("1.1");
    BigDecimal b = new BigDecimal("1.3");
    //1、a等于b条件成立
    //2、a和b的差 大于等于 0.1
    //3、a和b的差 小于等于 0.1
    BigDecimal subtract = a.subtract(b);
    //写法不成立,报错
    if (subtract > new BigDecimal("0,1")){

    }
    //写法没问题但是最终只能返回 0 、1 -1等等,无法判断是否大于0.1
    if (subtract.compareTo(new BigDecimal("0,1")) == 0){

    }
}

解决方案

这个时候我们要借助取正函数进行操作,返回具体数值进行比较的出判断结果。

@Test
public void testTest(){
	BigDecimal a = new BigDecimal("5.30");
	BigDecimal b = new BigDecimal("5.29");
	double abs = Math.abs(a.subtract(b).doubleValue());
	System.out.println(abs);
	if(abs<= 0.1){
		System.out.println("条件成立,进入判断");
	}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值