poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From cedricwal...@apache.org
Subject svn commit: r1514799 - in /poi/trunk/src: java/org/apache/poi/ss/formula/functions/Value.java testcases/org/apache/poi/ss/formula/functions/TestValue.java
Date Fri, 16 Aug 2013 17:15:48 GMT
Author: cedricwalter
Date: Fri Aug 16 17:15:47 2013
New Revision: 1514799

URL: http://svn.apache.org/r1514799
Log:
Bug 54723: Support for percentage in VALUE() function

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/functions/Value.java
    poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestValue.java

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/functions/Value.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/functions/Value.java?rev=1514799&r1=1514798&r2=1514799&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/functions/Value.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/functions/Value.java Fri Aug 16 17:15:47
2013
@@ -34,6 +34,7 @@ import org.apache.poi.ss.formula.eval.Va
  * properly the result is <b>#VALUE!</b> error. Blank string converts to zero.
  *
  * @author Josh Micich
+ * @author Cédric Walter
  */
 public final class Value extends Fixed1ArgFunction {
 
@@ -65,6 +66,7 @@ public final class Value extends Fixed1A
 		boolean foundCurrency = false;
 		boolean foundUnaryPlus = false;
 		boolean foundUnaryMinus = false;
+		boolean foundPercentage = false;
 
 		int len = strText.length();
 		int i;
@@ -123,8 +125,13 @@ public final class Value extends Fixed1A
 			}
 			switch (ch) {
 				case ' ':
-					String remainingText = strText.substring(i);
-					if (remainingText.trim().length() > 0) {
+					String remainingTextTrimmed = strText.substring(i).trim();
+                    // support for value[space]%
+                    if (remainingTextTrimmed.equals("%")) {
+                        foundPercentage= true;
+                        break;
+                    }
+                    if (remainingTextTrimmed.length() > 0) {
 						// intervening spaces not allowed once the digits start
 						return null;
 					}
@@ -162,6 +169,9 @@ public final class Value extends Fixed1A
 					sb.append(strText.substring(i));
 					i = len;
 					break;
+                case '%':
+                    foundPercentage = true;
+                    break;
 				default:
 					// all other characters are illegal
 					return null;
@@ -179,6 +189,7 @@ public final class Value extends Fixed1A
 			// still a problem parsing the number - probably out of range
 			return null;
 		}
-		return new Double(foundUnaryMinus ? -d : d);
+        Double result = new Double(foundUnaryMinus ? -d : d);
+        return foundPercentage ? result /100 : result;
 	}
 }

Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestValue.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestValue.java?rev=1514799&r1=1514798&r2=1514799&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestValue.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/functions/TestValue.java Fri Aug 16
17:15:47 2013
@@ -28,6 +28,7 @@ import org.apache.poi.ss.formula.eval.Va
  * Tests for {@link Value}
  *
  * @author Josh Micich
+ * @author Cédric Walter
  */
 public final class TestValue extends TestCase {
 
@@ -71,6 +72,8 @@ public final class TestValue extends Tes
 		confirmValue("1,000e2", 100000);
 		confirmValue("$10e2", 1000);
 		confirmValue("$1,000e2", 100000);
+        confirmValue("30%", 0.3);
+        confirmValue("30 %", 0.3);
 	}
 
 	public void testErrors() {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message