簡體   English   中英

Apache-POI-如何在Cell-Editor中像Excel一樣四舍五入數字

[英]Apache-POI - How do i round numbers like Excel does in Cell-Editor

我使用Apache-POI“ XSSF和SAX事件API”來導入Excel文件。

我用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如何知道它需要四舍五入到小數點分隔符后的四位數。 Apache POI如何幫助我做到這一點,因此我也可以在Excel導入中使用Edit-Value(而不是View-Value)?

我看過一張類似的票證,其中涵蓋了Excel的工作方式: 即使Excel不精確,Excel如何成功將其四舍五入?

在此故障單中,我想問一下,Apache POI如何為我提供幫助,因此我無需在這里重新發明輪子,也無需實施Excels算法。

Excel根據IEEE 754規范獲取雙精度值,然后四舍五入為15個有效數字,然后在表格中顯示。

為此,可以使用BigDecimal根據15位精度的MathContext設置進行四舍五入。

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文件時如何檢查包含日期和指數數字的字符串中的數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM