diff --git a/src/main/java/com/ql/util/express/parse/ExpressParse.java b/src/main/java/com/ql/util/express/parse/ExpressParse.java index 22bc8d724..daf9fa3be 100644 --- a/src/main/java/com/ql/util/express/parse/ExpressParse.java +++ b/src/main/java/com/ql/util/express/parse/ExpressParse.java @@ -172,7 +172,12 @@ public List transferWord2ExpressNode(ExpressPackage rootExpressPack tempWord = tempWord.substring(0, tempWord.length() - 1); objectValue = Long.valueOf(tempWord); } else { - long tempLong = Long.parseLong(tempWord); + long tempLong; + if (tempWord.indexOf("e") >=0 || tempWord.indexOf("E") >=0) { + tempLong = Double.valueOf(tempWord).longValue(); + } else { + tempLong = Long.parseLong(tempWord); + } if (tempLong <= Integer.MAX_VALUE && tempLong >= Integer.MIN_VALUE) { tempType = nodeTypeManager.findNodeType("CONST_INTEGER"); objectValue = (int)tempLong; diff --git a/src/test/java/com/ql/util/express/bugfix/ScientificNumberTest.java b/src/test/java/com/ql/util/express/bugfix/ScientificNumberTest.java new file mode 100644 index 000000000..587432f10 --- /dev/null +++ b/src/test/java/com/ql/util/express/bugfix/ScientificNumberTest.java @@ -0,0 +1,34 @@ +package com.ql.util.express.bugfix; + +import com.ql.util.express.DefaultContext; +import com.ql.util.express.ExpressRunner; +import com.ql.util.express.IExpressContext; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +/** + * created by jiwenxing on 2022/5/12 + */ +public class ScientificNumberTest { + + static List express = new ArrayList<>(); + static { + express.add("2e2==200"); + express.add("2E2==200"); + express.add("2.0e2==200"); + express.add("2.0E2==200"); + } + + @Test + public void testFunction() throws Exception { + ExpressRunner runner = new ExpressRunner(); + IExpressContext context = new DefaultContext<>(); + for (String exp: express) { + Object result = runner.execute(exp, context, null, false, false); + System.out.println(exp + ": " + result); + assert ((Boolean)result); + } + } +}