diff --git a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java index 1bd591e3..9cfd7b59 100644 --- a/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java +++ b/easyexcel-core/src/main/java/com/alibaba/excel/metadata/format/DataFormatter.java @@ -514,6 +514,8 @@ public class DataFormatter { private static final Pattern endsWithCommas = Pattern.compile("(,+)$"); private BigDecimal divider; private static final BigDecimal ONE_THOUSAND = new BigDecimal(1000); + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + private static final BigDecimal TEN = new BigDecimal(10); private final DecimalFormat df; private static String trimTrailingCommas(String s) { @@ -525,11 +527,23 @@ public class DataFormatter { setExcelStyleRoundingMode(df); Matcher endsWithCommasMatcher = endsWithCommas.matcher(pattern); if (endsWithCommasMatcher.find()) { + + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + int index_point = pattern.indexOf("."); + int index_comma = pattern.indexOf(","); + int cnt = index_comma - index_point - 1; + String commas = (endsWithCommasMatcher.group(1)); BigDecimal temp = BigDecimal.ONE; for (int i = 0; i < commas.length(); ++i) { temp = temp.multiply(ONE_THOUSAND); } + + //CS304 Issue link: https://github.com/alibaba/easyexcel/issues/2319 + for (int i = 0; i < cnt ; i++) { + temp = temp.multiply(TEN); + } + divider = temp; } else { divider = null; diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java new file mode 100644 index 00000000..f250a75a --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319.java @@ -0,0 +1,15 @@ +package com.alibaba.easyexcel.test.temp.issue2319; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +public class Issue2319 { + private String num1; + private String num2; +} diff --git a/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java new file mode 100644 index 00000000..67c49d7f --- /dev/null +++ b/easyexcel-test/src/test/java/com/alibaba/easyexcel/test/temp/issue2319/Issue2319Test.java @@ -0,0 +1,44 @@ +package com.alibaba.easyexcel.test.temp.issue2319; + +import java.io.File; +import java.math.BigDecimal; + +import com.alibaba.easyexcel.test.util.TestFileUtil; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.metadata.format.DataFormatter; +import com.alibaba.excel.read.listener.PageReadListener; +import com.alibaba.excel.util.NumberDataFormatterUtils; +import com.alibaba.fastjson.JSON; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Ignore; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +@Ignore +@Slf4j +public class Issue2319Test { + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2319 + @Test + public void IssueTest1() { + String fileName = TestFileUtil.getPath() + "temp/issue2319" + File.separator + "test1.xlsx"; + EasyExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + + //CS304 (manually written) Issue link: https://github.com/alibaba/easyexcel/issues/2319 + @Test + public void IssueTest2() { + String fileName = TestFileUtil.getPath() + "temp/issue2319" + File.separator + "test2.xlsx"; + EasyExcel.read(fileName, Issue2319.class, new PageReadListener(dataList -> { + for (Issue2319 issueData : dataList) { + log.info("读取到一条数据{}", JSON.toJSONString(issueData)); + } + })).sheet().doRead(); + } + +} diff --git a/easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx b/easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx new file mode 100644 index 00000000..6c6cc8d7 Binary files /dev/null and b/easyexcel-test/src/test/resources/temp/issue2319/test1.xlsx differ diff --git a/easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx b/easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx new file mode 100644 index 00000000..96a99bd8 Binary files /dev/null and b/easyexcel-test/src/test/resources/temp/issue2319/test2.xlsx differ