BigDecimal在某区间进行比较
转自:https://blog.csdn.net/pengsh_clud/article/details/101218128
由于BigDecimal 的精度比较高,在计算的时候有时候存入数据库的时候会进行四舍五入 会对后面的结果判断存在误差 所以比较的结果会在一个区间的
public static boolean compareToInterval(BigDecimal bigDecimal){
//设置区间在+0.00000001和-0.00000001之间 也是允许的误差 只能比两端的值小
// 先对传入的bigDecimal 参数进行符号判断 在对区间两端的值进行比较
// 即和0进行比较 小于即为负数 大于即为负数 等于即为0
int symbol=bigDecimal.compareTo(new BigDecimal("0"));
if(symbol>=0){
int begin=bigDecimal.compareTo(new BigDecimal("0.00000001"));
if(begin<=0){
return true;
}
}
else {
int end=bigDecimal.compareTo(new BigDecimal("-0.00000001"));
if(end>=0){
return true;
}
}
return false;
}
eg:
//3.1、1类金额预算
if(!StringUtils.isEmpty(map.get("budgutType"))) {
if ("1".equals(map.get("budgutType"))) {
airVO = airVO.stream().filter(x -> x.getRailBudgetOne() != null).filter(x -> {
int symbol = x.getRailBudgetAir().compareTo(new BigDecimal("0"));
if (symbol > 0 && !"".equals(map.get("beginBudget1")) && !"".equals(map.get("endBudget1"))) {
int begin = x.getRailBudgetAir().compareTo(new BigDecimal(map.get("beginBudgetAir")));
int end = x.getRailBudgetAir().compareTo(new BigDecimal(map.get("endBudget1")));
return (begin >= 0 && end <= 0);
} else {
return false;
}
}).collect(Collectors.toList());
}
//3.2、2类金额预算
else if ("2".equals(map.get("budgutType"))) {
airVO = airVO.stream().filter(x -> x.getComBudgetAir() != null).filter(x -> {
int symbol = x.getComBudgetAir().compareTo(new BigDecimal("0"));
if (symbol > 0 && !"".equals(map.get("beginBudget1")) && !"".equals(map.get("endBudget1"))) {
int begin = x.getComBudgetAir().compareTo(new BigDecimal(map.get("beginBudget1")));
int end = x.getComBudgetAir().compareTo(new BigDecimal(map.get("endBudget1")));
return (begin >= 0 && end <= 0);
}else {
return false;
}
}).collect(Collectors.toList());
}
//3.3、3类金额预算
else if ("3".equals(map.get("budgutType"))) {
airVO = airVO.stream().filter(x -> x.getGovBudgetAir() != null).filter(x -> {
int symbol = x.getGovBudgetAir().compareTo(new BigDecimal("0"));
if (symbol > 0 && !"".equals(map.get("beginBudget1")) && !"".equals(map.get("endBudget1"))) {
int begin = x.getGovBudgetAir().compareTo(new BigDecimal(map.get("beginBudget1")));
int end = x.getGovBudgetAir().compareTo(new BigDecimal(map.get("endBudget1")));
return (begin >= 0 && end <= 0);
} else {
return false;
}
}).collect(Collectors.toList());
}
}
这样就可以取bigdecimal范围内的值了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2022-06-01 去掉UUID中的"-"
2022-06-01 String的常用方法