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]