11package toolgood .algorithm ;
22
3- import java .math .BigDecimal ;
4- import java .util .ArrayList ;
5- import java .util .List ;
6- import java .util .Map ;
7- import java .util .TreeMap ;
8-
9- import toolgood .algorithm .internals .AntlrErrorListener ;
10- import toolgood .algorithm .internals .CharUtil ;
11- import toolgood .algorithm .internals .MathSimplifiedFormulaVisitor ;
12- import toolgood .algorithm .internals .AntlrCharStream ;
13- import toolgood .algorithm .internals .MathVisitor ;
3+ import org .antlr .v4 .runtime .CharStreams ;
4+ import org .antlr .v4 .runtime .CommonTokenStream ;
5+ import org .antlr .v4 .runtime .RecognitionException ;
6+ import org .joda .time .DateTime ;
7+ import toolgood .algorithm .internals .*;
148import toolgood .algorithm .litJson .JsonData ;
159import toolgood .algorithm .litJson .JsonMapper ;
1610import toolgood .algorithm .math .mathLexer ;
1711import toolgood .algorithm .math .mathParser ;
18- import toolgood .algorithm .math .mathParser .* ;
12+ import toolgood .algorithm .math .mathParser .ProgContext ;
1913
20- import org .antlr .v4 .runtime .CharStreams ;
21- import org .antlr .v4 .runtime .CommonTokenStream ;
22- import org .antlr .v4 .runtime .RecognitionException ;
23- import org .joda .time .DateTime ;
14+ import java .math .BigDecimal ;
15+ import java .util .ArrayList ;
16+ import java .util .List ;
17+ import java .util .Map ;
18+ import java .util .TreeMap ;
2419
2520public class AlgorithmEngine {
2621 /**
@@ -234,6 +229,23 @@ public Operand Evaluate() throws Exception {
234229 return visitor .visit (_context );
235230 }
236231
232+ public BigDecimal TryEvaluate (final String exp , final BigDecimal defvalue ) {
233+ try {
234+ if (Parse (exp )) {
235+ Operand obj = Evaluate ();
236+ obj = obj .ToNumber ("It can't be converted to number!" );
237+ if (obj .IsError ()) {
238+ LastError = obj .ErrorMsg ();
239+ return defvalue ;
240+ }
241+ return obj .NumberValue ();
242+ }
243+ } catch (final Exception ex ) {
244+ LastError = ex .getMessage ();
245+ }
246+ return defvalue ;
247+ }
248+
237249 public int TryEvaluate (final String exp , final int defvalue ) {
238250 try {
239251 if (Parse (exp )) {
@@ -260,13 +272,14 @@ public double TryEvaluate(final String exp, final double defvalue) {
260272 LastError = obj .ErrorMsg ();
261273 return defvalue ;
262274 }
263- return obj .NumberValue (). doubleValue ();
275+ return obj .DoubleValue ();
264276 }
265277 } catch (final Exception ex ) {
266278 LastError = ex .getMessage ();
267279 }
268280 return defvalue ;
269281 }
282+
270283 public long TryEvaluate (final String exp , final long defvalue ) {
271284 try {
272285 if (Parse (exp )) {
@@ -357,9 +370,8 @@ public MyDate TryEvaluate(final String exp, final MyDate defvalue) {
357370
358371 /**
359372 * 获取简化公式
360- *
373+ *
361374 * @param formula 公式
362- *
363375 */
364376 public String GetSimplifiedFormula (final String formula ) {
365377 try {
@@ -392,7 +404,7 @@ public String GetSimplifiedFormula(final String formula) {
392404
393405 /**
394406 * 计算公式
395- *
407+ *
396408 * @param formula 公式
397409 * @param splitChar 分隔符
398410 * @return
@@ -407,7 +419,7 @@ public String EvaluateFormula(String formula, Character splitChar) {
407419
408420 /**
409421 * 计算公式
410- *
422+ *
411423 * @param formula 公式
412424 * @param splitChars 分隔符
413425 * @return
0 commit comments