Commit 9ab5b273 authored by liwenbin's avatar liwenbin

修复EL表达式支持数字以外的变量,并且修复=,!=判断的bug

parent a9a0a33e
...@@ -26,8 +26,6 @@ package com.quantgroup.asset.distribution.util.calc; ...@@ -26,8 +26,6 @@ package com.quantgroup.asset.distribution.util.calc;
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
* *
*/ */
import com.google.common.collect.Sets;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
...@@ -674,8 +672,13 @@ public class Expression { ...@@ -674,8 +672,13 @@ public class Expression {
if (v1 == null || v2 == null) { if (v1 == null || v2 == null) {
return BigDecimal.ZERO; return BigDecimal.ZERO;
} }
return new BigDecimal(v1).compareTo(new BigDecimal(v2)) == 0 ? BigDecimal.ONE if (v1.equals(v2)) {
: BigDecimal.ZERO; return BigDecimal.ONE;
} else {
return BigDecimal.ZERO;
}
// return new BigDecimal(v1).compareTo(new BigDecimal(v2)) == 0 ? BigDecimal.ONE
// : BigDecimal.ZERO;
} }
}); });
addOperator(new Operator("==", OPERATOR_PRECEDENCE_EQUALITY, false, true) { addOperator(new Operator("==", OPERATOR_PRECEDENCE_EQUALITY, false, true) {
...@@ -694,8 +697,11 @@ public class Expression { ...@@ -694,8 +697,11 @@ public class Expression {
if (v1 == null || v2 == null) { if (v1 == null || v2 == null) {
return BigDecimal.ONE; return BigDecimal.ONE;
} }
return new BigDecimal(v1).compareTo(new BigDecimal(v2)) != 0 ? BigDecimal.ONE if (!v1.equals(v2)) {
: BigDecimal.ZERO; return BigDecimal.ONE;
} else {
return BigDecimal.ZERO;
}
} }
}); });
addOperator(new Operator("<>", OPERATOR_PRECEDENCE_EQUALITY, false, true) { addOperator(new Operator("<>", OPERATOR_PRECEDENCE_EQUALITY, false, true) {
...@@ -1400,7 +1406,8 @@ public class Expression { ...@@ -1400,7 +1406,8 @@ public class Expression {
stack.push(() -> { stack.push(() -> {
LazyNumber lazyVariable = variables.get(token.surface); LazyNumber lazyVariable = variables.get(token.surface);
String value = lazyVariable == null ? null : lazyVariable.eval(); String value = lazyVariable == null ? null : lazyVariable.eval();
return value == null ? null : new BigDecimal(value).round(mc).toPlainString(); // return value == null ? null : new BigDecimal(value).round(mc).toPlainString();
return value == null ? null : value;
}); });
break; break;
case FUNCTION: case FUNCTION:
...@@ -1570,7 +1577,10 @@ public class Expression { ...@@ -1570,7 +1577,10 @@ public class Expression {
variables.put(variable, CreateLazyNumber(new BigDecimal(value, mc).toPlainString())); variables.put(variable, CreateLazyNumber(new BigDecimal(value, mc).toPlainString()));
} else if (value.equalsIgnoreCase("null")) { } else if (value.equalsIgnoreCase("null")) {
variables.put(variable, null); variables.put(variable, null);
} else { } else if (value.equalsIgnoreCase("e") ||
value.equalsIgnoreCase("PI") ||
value.equalsIgnoreCase("TRUE")||
value.equalsIgnoreCase("FALSE")) {
final String expStr = value; final String expStr = value;
variables.put(variable, new LazyNumber() { variables.put(variable, new LazyNumber() {
private final Map<String, LazyNumber> outerVariables = variables; private final Map<String, LazyNumber> outerVariables = variables;
...@@ -1591,6 +1601,9 @@ public class Expression { ...@@ -1591,6 +1601,9 @@ public class Expression {
} }
}); });
rpn = null; rpn = null;
} else {
variables.put(variable, CreateLazyNumber(value));
rpn = null;
} }
return this; return this;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment