Browse Source

Bug 54723: Support for percentage in VALUE() function

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1514799 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_10_BETA2
Cédric Walter 11 years ago
parent
commit
1b795e34f7

+ 14
- 3
src/java/org/apache/poi/ss/formula/functions/Value.java View File

* properly the result is <b>#VALUE!</b> error. Blank string converts to zero. * properly the result is <b>#VALUE!</b> error. Blank string converts to zero.
* *
* @author Josh Micich * @author Josh Micich
* @author Cédric Walter
*/ */
public final class Value extends Fixed1ArgFunction { public final class Value extends Fixed1ArgFunction {


boolean foundCurrency = false; boolean foundCurrency = false;
boolean foundUnaryPlus = false; boolean foundUnaryPlus = false;
boolean foundUnaryMinus = false; boolean foundUnaryMinus = false;
boolean foundPercentage = false;


int len = strText.length(); int len = strText.length();
int i; int i;
} }
switch (ch) { switch (ch) {
case ' ': 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 // intervening spaces not allowed once the digits start
return null; return null;
} }
sb.append(strText.substring(i)); sb.append(strText.substring(i));
i = len; i = len;
break; break;
case '%':
foundPercentage = true;
break;
default: default:
// all other characters are illegal // all other characters are illegal
return null; return null;
// still a problem parsing the number - probably out of range // still a problem parsing the number - probably out of range
return null; return null;
} }
return new Double(foundUnaryMinus ? -d : d);
Double result = new Double(foundUnaryMinus ? -d : d);
return foundPercentage ? result /100 : result;
} }
} }

+ 3
- 0
src/testcases/org/apache/poi/ss/formula/functions/TestValue.java View File

* Tests for {@link Value} * Tests for {@link Value}
* *
* @author Josh Micich * @author Josh Micich
* @author Cédric Walter
*/ */
public final class TestValue extends TestCase { public final class TestValue extends TestCase {


confirmValue("1,000e2", 100000); confirmValue("1,000e2", 100000);
confirmValue("$10e2", 1000); confirmValue("$10e2", 1000);
confirmValue("$1,000e2", 100000); confirmValue("$1,000e2", 100000);
confirmValue("30%", 0.3);
confirmValue("30 %", 0.3);
} }


public void testErrors() { public void testErrors() {

Loading…
Cancel
Save