]> source.dussan.org Git - poi.git/commitdiff
bug 59638: patch from Axel Howind, support non-comma number grouping separators ...
authorJaven O'Neal <onealj@apache.org>
Tue, 7 Jun 2016 06:18:44 +0000 (06:18 +0000)
committerJaven O'Neal <onealj@apache.org>
Tue, 7 Jun 2016 06:18:44 +0000 (06:18 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1747139 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/usermodel/DataFormatter.java
src/testcases/org/apache/poi/ss/usermodel/TestDataFormatter.java

index 6f0d830d3b9ac6b468cb70960ec5003584f0b4c7..a20d08328099506a0fbf2f4c39d4ef9680840119 100644 (file)
@@ -674,13 +674,18 @@ public class DataFormatter implements Observer {
         // eg for a format like #'##0 which wants 12'345 not 12,345
         Matcher agm = alternateGrouping.matcher(format);
         if (agm.find()) {
-            symbols = DecimalFormatSymbols.getInstance(locale);
-            
             char grouping = agm.group(2).charAt(0);
-            symbols.setGroupingSeparator(grouping);
-            String oldPart = agm.group(1);
-            String newPart = oldPart.replace(grouping, ',');
-            format = format.replace(oldPart, newPart);
+            // Only replace the grouping character if it is not the default
+            // grouping character for the US locale (',') in order to enable
+            // correct grouping for non-US locales.
+            if (grouping!=',') {
+                symbols = DecimalFormatSymbols.getInstance(locale);
+
+                symbols.setGroupingSeparator(grouping);
+                String oldPart = agm.group(1);
+                String newPart = oldPart.replace(grouping, ',');
+                format = format.replace(oldPart, newPart);
+            }
         }
         
         try {
index bc9ebed8041e164245c89e41b0caf8c26ffbb898..d827355cb5f1a5f54b09980c31569556a7f51581 100644 (file)
@@ -82,6 +82,25 @@ public class TestDataFormatter {
 
     }
 
+
+    /**
+     * Test that we use the specified locale when deciding
+     *   how to format normal numbers
+     */
+    @Test
+    public void testGrouping() {
+        DataFormatter dfUS = new DataFormatter(Locale.US);
+        DataFormatter dfDE = new DataFormatter(Locale.GERMAN);
+
+        assertEquals("1,234.57", dfUS.formatRawCellContents(1234.567, -1, "#,##0.00"));
+        assertEquals("1'234.57", dfUS.formatRawCellContents(1234.567, -1, "#'##0.00"));
+        assertEquals("1 234.57", dfUS.formatRawCellContents(1234.567, -1, "# ##0.00"));
+
+        assertEquals("1.234,57", dfDE.formatRawCellContents(1234.567, -1, "#,##0.00"));
+        assertEquals("1'234,57", dfDE.formatRawCellContents(1234.567, -1, "#'##0.00"));
+        assertEquals("1 234,57", dfDE.formatRawCellContents(1234.567, -1, "# ##0.00"));
+    }
+
     /**
      * Ensure that colours get correctly
      *  zapped from within the format strings