]> granicus.if.org Git - icu/commitdiff
ICU-10026 Make Numberformat.parse() method accept ascii plus and minus in addition...
authorTravis Keep <keep94@gmail.com>
Tue, 26 Mar 2013 23:03:44 +0000 (23:03 +0000)
committerTravis Keep <keep94@gmail.com>
Tue, 26 Mar 2013 23:03:44 +0000 (23:03 +0000)
X-SVN-Rev: 33461

icu4j/main/classes/core/src/com/ibm/icu/text/DecimalFormat.java
icu4j/main/tests/core/src/com/ibm/icu/dev/test/format/NumberFormatTest.java

index 1c196138780838204569c9cc2f58a436069d7c08..4c61113c6058f8b2c6842ea5cc50cb021399474f 100644 (file)
@@ -1778,6 +1778,13 @@ public class DecimalFormat extends NumberFormat {
      * @return a Number or CurrencyAmount or null
      */
     private Object parse(String text, ParsePosition parsePosition, Currency[] currency) {
+        if (symbols.getMinusSign() != '-') {
+            text = text.replace('-', symbols.getMinusSign());
+        }
+        if (symbols.getPlusSign() != '+') {
+            text = text.replace('+', symbols.getPlusSign());
+        }
+       
         int backup;
         int i = backup = parsePosition.getIndex();
 
index e4df658afbd536419fb7d86447213f99d3d58dcf..d82ea0ed87488bac8ac42dc516cac76768364536 100644 (file)
@@ -43,6 +43,16 @@ public class NumberFormatTest extends com.ibm.icu.dev.test.TestFmwk {
     public static void main(String[] args) throws Exception {
         new NumberFormatTest().run(args);
     }
+    
+    public void TestParseNegativeWithLocaleUsingNonAsciiNegative() {
+        DecimalFormat parser = (DecimalFormat) NumberFormat.getInstance(new ULocale("fa"));
+        try {
+          double value = parser.parse("-0,5").doubleValue();
+          assertEquals("Expect -0.5", -0.5, value);
+        } catch (ParseException e) {
+            this.errln("Parsing -0.5 should have succeeded.");
+        }
+    }
 
     // Test various patterns
     public void TestPatterns() {