You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
package com.mh.common.utils; |
|
|
|
import java.math.BigDecimal; |
|
import java.util.HashMap; |
|
import java.util.Map; |
|
import java.util.function.BiPredicate; |
|
|
|
/** |
|
* @author LJF |
|
* @version 1.0 |
|
* @project EEMCS |
|
* @description 数据比较值 |
|
* @date 2025-02-21 15:56:56 |
|
*/ |
|
public class BigDecimalUtils { |
|
// 定义运算符与比较逻辑的映射 |
|
private static final Map<String, BiPredicate<BigDecimal, BigDecimal>> OPERATORS = new HashMap<>(); |
|
|
|
static { |
|
// 初始化支持的运算符 |
|
OPERATORS.put(">", (a, b) -> a.compareTo(b) > 0); |
|
OPERATORS.put(">=", (a, b) -> a.compareTo(b) >= 0); |
|
OPERATORS.put("<", (a, b) -> a.compareTo(b) < 0); |
|
OPERATORS.put("<=", (a, b) -> a.compareTo(b) <= 0); |
|
OPERATORS.put("==", (a, b) -> a.compareTo(b) == 0); |
|
OPERATORS.put("=", (a, b) -> a.compareTo(b) == 0); // 添加对 = 运算符的支持 |
|
OPERATORS.put("!=", (a, b) -> a.compareTo(b) != 0); |
|
} |
|
|
|
/** |
|
* 根据运算符比较两个 BigDecimal |
|
* @param operator 运算符(如 ">", ">=") |
|
* @param a 第一个数值 |
|
* @param b 第二个数值 |
|
* @return 比较结果 |
|
* @throws IllegalArgumentException 如果运算符无效 |
|
*/ |
|
public static boolean compare(String operator, BigDecimal a, BigDecimal b) { |
|
BiPredicate<BigDecimal, BigDecimal> predicate = OPERATORS.get(operator); |
|
if (predicate == null) { |
|
throw new IllegalArgumentException("不支持的运算符: " + operator); |
|
} |
|
return predicate.test(a, b); |
|
} |
|
|
|
public static void main(String[] args) { |
|
BigDecimal a = new BigDecimal("10.00"); |
|
BigDecimal b = new BigDecimal("10.00"); |
|
System.out.println(compare(">", a, b)); |
|
System.out.println(compare(">=", a, b)); |
|
System.out.println(compare("<", a, b)); |
|
System.out.println(compare("<=", a, b)); |
|
System.out.println(compare("==", a, b)); |
|
System.out.println(compare("!=", a, b)); |
|
} |
|
}
|
|
|