public class DecimalUtils {
private final BigDecimal value;
private DecimalUtils(BigDecimal value) {
this.value = value;
}
private static BigDecimal objectOfDecimal(Object val) {
BigDecimal bigDecimal = null;
if (val instanceof Number) {
bigDecimal = BigDecimal.valueOf(((Number) val).longValue());
}
if (val instanceof Long) {
bigDecimal = BigDecimal.valueOf((Long) val);
}
if (val instanceof Integer) {
bigDecimal = BigDecimal.valueOf((Integer) val);
}
if (val instanceof String) {
bigDecimal = BigDecimal.valueOf(Double.parseDouble(val.toString()));
}
if (val instanceof Double) {
bigDecimal = BigDecimal.valueOf((Double)val);
}
return bigDecimal;
}
public static DecimalUtils of(Object value) {
return new DecimalUtils(objectOfDecimal(value));
}
public boolean lt(Object val) {
return value.compareTo(objectOfDecimal(val)) == -1;
}
public boolean eq(Object val) {
return value.compareTo(objectOfDecimal(val)) == 0;
}
public boolean gt(Object val) {
return value.compareTo(objectOfDecimal(val)) == 1;
}
public boolean gte(Object val) {
return value.compareTo(objectOfDecimal(val)) > -1;
}
public boolean lte(Object val) {
return value.compareTo(objectOfDecimal(val)) < 1;
}
}
public class IntervalUtil {
public static boolean isInTheInterval(String data_value,String interval) {
String formula = getFormulaByAllInterval(data_value,interval,"||");
ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
try {
return (Boolean) jse.eval(formula);
} catch (Exception t) {
return false;
}
}
private static String getFormulaByAllInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String limit:interval.split("U")){
buff.append("(").append(getFormulaByInterval(date_value, limit," && ")).append(")").append(connector);
}
String allLimitInvel = buff.toString();
int index = allLimitInvel.lastIndexOf(connector);
allLimitInvel = allLimitInvel.substring(0,index);
return allLimitInvel;
}
private static String getFormulaByInterval(String date_value, String interval, String connector) {
StringBuffer buff = new StringBuffer();
for(String halfInterval:interval.split(",")){
buff.append(getFormulaByHalfInterval(halfInterval, date_value)).append(connector);
}
String limitInvel = buff.toString();
int index = limitInvel.lastIndexOf(connector);
limitInvel = limitInvel.substring(0,index);
return limitInvel;
}
private static String getFormulaByHalfInterval(String halfInterval, String date_value) {
halfInterval = halfInterval.trim();
if(halfInterval.contains("∞")){
return "1 == 1";
}
StringBuffer formula = new StringBuffer();
String data = "";
String opera = "";
if(halfInterval.matches("^([<>≤≥\\[\\(]{1}(-?\\d+.?\\d*\\%?))$")){
opera = halfInterval.substring(0,1);
data = halfInterval.substring(1);
}else{
opera = halfInterval.substring(halfInterval.length()-1);
data = halfInterval.substring(0,halfInterval.length()-1);
}
double value = dealPercent(data);
formula.append(date_value).append(" ").append(opera).append(" ").append(value);
String a = formula.toString();
return a.replace("[", ">=").replace("(", ">").replace("]", "<=").replace(")", "<").replace("≤", "<=").replace("≥", ">=");
}
private static double dealPercent(String str){
double d = 0.0;
if(str.contains("%")){
str = str.substring(0,str.length()-1);
d = Double.parseDouble(str)/100;
}else{
d = Double.parseDouble(str);
}
return d;
}
}