我使用apache-poi" xssf和sax event api"来导入excel-files。
与apache-poi一起解析原始价值,并想问,我该如何将这些原始值完全绕,就像Excel-GUI对单元编辑器所做的那样。以下示例说明了问题:
Raw: 1.9210999999999999E-2 (value is stored like this in xlsx-file)
Edit: 1.9211% (user sees this value in excel cell-editor)
View: 1.92% (user sees this value in excel grid-overview)
Format: 0.00% (the cell-style)
Excel如何读取编辑值的原始值?Excel如何知道它需要在十进制分离器之后到达4位数的一部分。Apache POI如何帮助我这样做,因此我也可以在我的Excel-Import中使用编辑值(而不是视图值(?
我看到了类似的票,涵盖了它的表现如何:即使它们不精确,excel如何成功地绕过浮数?
在我想问的这张票中,Apache Poi如何帮助我,因此我不需要在这里重新发明轮子,并实施Excecrels算法。
excel根据IEEE 754规格获得双重值,然后在显示在表格中之前将其回合为15个重要数字。
可以根据15位数字精度的MathContext设置使用BigDecimal found。
import java.math.BigDecimal;
import java.math.MathContext;
class ReadLongNumbersAsExcel {
public static void main(String[] args) throws Exception{
String v = "1.921099999999999E-2";
double d = Double.parseDouble(v);
System.out.println("raw: " + v);
System.out.println("double: " + d);
BigDecimal bd = new BigDecimal(d);
v = bd.round(new MathContext(15)).toPlainString();
System.out.println("like Excel: " + v);
}
}
%
情况是一种特殊情况,因为在这种情况下Excel显示的不是真正存储的值,但显示该值乘以100,然后是"%"。因此,如果您想要同样的事情,那就做同样的事情。在使原始值四舍五入为15个有效数字后,确实会乘以100并附加"%"。
但是,如果需求仅像Excel中的格式值一样,请查看字符串中的一个数字包含日期和指数数字,而使用Java中的Apache Excel文件解析Excel文件时>