Author: fanningpj
Date: Sat Apr  9 12:02:55 2022
New Revision: 1899680

URL: http://svn.apache.org/viewvc?rev=1899680&view=rev
Log:
[github-321] Fix issue with rounding in DataFormatter. Thanks to Colin Wang. 
This closes #321

Modified:
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
    poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java
    poi/trunk/test-data/spreadsheet/github-321.xlsx

Modified: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=1899680&r1=1899679&r2=1899680&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
 Sat Apr  9 12:02:55 2022
@@ -1406,9 +1406,11 @@ public final class TestXSSFWorkbook exte
             DataFormatter dataFormatter = new DataFormatter();
             FormulaEvaluator formulaEvaluator = 
wb.getCreationHelper().createFormulaEvaluator();
             XSSFCell a3 = xssfSheet.getRow(2).getCell(0);
+            assertEquals(2.05, a3.getNumericCellValue());
             assertEquals("2.05", dataFormatter.formatCellValue(a3));
             assertEquals("2.05", dataFormatter.formatCellValue(a3, 
formulaEvaluator));
             XSSFCell a4 = xssfSheet.getRow(3).getCell(0);
+            assertEquals(2.05, a4.getNumericCellValue());
             assertEquals("2.1", dataFormatter.formatCellValue(a4));
             assertEquals("2.1", dataFormatter.formatCellValue(a4, 
formulaEvaluator));
         }

Modified: 
poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java?rev=1899680&r1=1899679&r2=1899680&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java 
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/usermodel/DataFormatter.java 
Sat Apr  9 12:02:55 2022
@@ -51,7 +51,7 @@ import org.apache.poi.util.LocaleUtil;
 
 
 /**
- * DataFormatter contains methods for formatting the value stored in an
+ * DataFormatter contains methods for formatting the value stored in a
  * Cell. This can be useful for reports and GUI presentations when you
  * need to display data exactly as it appears in Excel. Supported formats
  * include currency, SSN, percentages, decimals, dates, phone numbers, zip
@@ -139,7 +139,7 @@ public class DataFormatter {
     private static final Pattern localePatternGroup = 
Pattern.compile("(\\[\\$[^-\\]]*-[0-9A-Z]+])");
 
     /**
-     * A regex to match the colour formattings rules.
+     * A regex to match the colour formatting's rules.
      * Allowed colours are: Black, Blue, Cyan, Green,
      *  Magenta, Red, White, Yellow, "Color n" (1<=n<=56)
      */
@@ -948,9 +948,9 @@ public class DataFormatter {
         Format numberFormat = getFormat(cell, cfEvaluator);
         double d = cell.getNumericCellValue();
         if (numberFormat == null) {
-            return String.valueOf(d);
+            return NumberToTextConverter.toText(d);
         }
-        String formatted = numberFormat.format(d);
+        String formatted = numberFormat.format(new 
BigDecimal(NumberToTextConverter.toText(d)));
         return formatted.replaceFirst("E(\\d)", "E+$1"); // to match Excel's 
E-notation
     }
 

Modified: poi/trunk/test-data/spreadsheet/github-321.xlsx
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/github-321.xlsx?rev=1899680&r1=1899679&r2=1899680&view=diff
==============================================================================
Binary files - no diff available.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to