Index: src/java/org/apache/poi/hssf/model/FormulaParser.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/java/org/apache/poi/hssf/model/FormulaParser.java,v retrieving revision 1.17 diff -u -r1.17 FormulaParser.java --- src/java/org/apache/poi/hssf/model/FormulaParser.java 29 Apr 2004 07:16:36 -0000 1.17 +++ src/java/org/apache/poi/hssf/model/FormulaParser.java 8 Feb 2005 21:32:26 -0000 @@ -484,7 +484,13 @@ if (IsDigit(look)) number = number +"."+ GetNum(); //this also takes care of someone entering "1234." tokens.add(new NumberPtg(number)); } else { - tokens.add(new IntPtg(number)); //TODO:what if the number is too big to be a short? ..add factory to return Int or Number! + long tempNum = Long.parseLong(number.trim()); + if (tempNum <= Short.MAX_VALUE && tempNum >= Short.MIN_VALUE) { + tokens.add(new IntPtg(number)); + } + else { + tokens.add(new NumberPtg(number)); + } } } } Index: src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java =================================================================== RCS file: /home/cvspublic/jakarta-poi/src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java,v retrieving revision 1.14 diff -u -r1.14 TestFormulaParser.java --- src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java 1 Jan 2005 07:06:34 -0000 1.14 +++ src/testcases/org/apache/poi/hssf/model/TestFormulaParser.java 8 Feb 2005 21:32:28 -0000 @@ -23,6 +23,7 @@ import org.apache.poi.hssf.record.formula.AddPtg; import org.apache.poi.hssf.record.formula.AttrPtg; import org.apache.poi.hssf.record.formula.BoolPtg; +import org.apache.poi.hssf.record.formula.DividePtg; import org.apache.poi.hssf.record.formula.EqualPtg; import org.apache.poi.hssf.record.formula.FuncVarPtg; import org.apache.poi.hssf.record.formula.IntPtg; @@ -30,6 +31,7 @@ import org.apache.poi.hssf.record.formula.LessThanPtg; import org.apache.poi.hssf.record.formula.NamePtg; import org.apache.poi.hssf.record.formula.NotEqualPtg; +import org.apache.poi.hssf.record.formula.NumberPtg; import org.apache.poi.hssf.record.formula.Ptg; import org.apache.poi.hssf.record.formula.ReferencePtg; import org.apache.poi.hssf.record.formula.StringPtg; @@ -56,6 +58,16 @@ } + public void testSimpleLongFormula() { + FormulaParser fp = new FormulaParser("40000/2", null); + fp.parse(); + Ptg[] ptgs = fp.getRPNPtg(); + assertTrue("three tokens expected, got "+ptgs.length,ptgs.length == 3); + assertTrue("",(ptgs[0] instanceof NumberPtg)); + assertTrue("",(ptgs[1] instanceof IntPtg)); + assertTrue("",(ptgs[2] instanceof DividePtg)); + } + public void testSimpleFormula() { FormulaParser fp = new FormulaParser("2+2;",null); fp.parse();