我無法確認您的意見。
如果我有以下的Excel:
正如你在A1
看到5.25976143202331%
。這是德文Excel
,所以小數點分隔符是逗號。但那並不重要。
那裏XML
是:
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.25">
<c r="A1" s="1">
<v>5.2597614320233098E-2</v>
</c>
</row>
</sheetData>
以下代碼
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.format.CellNumberFormatter;
import java.io.*;
import java.math.BigDecimal;
import java.util.Locale;
class ExcelProcentValuePrecision {
public static void main(String[] args) throws Exception{
InputStream inp = new FileInputStream("ExcelProcentValuePrecision.xlsx");
Workbook workbook = WorkbookFactory.create(inp);
Cell cell = workbook.getSheetAt(0).getRow(0).getCell(0);
String s = ((XSSFCell)cell).getCTCell().getV();
System.out.println(s);
BigDecimal bd = new BigDecimal(s);
System.out.println(bd);
double d = cell.getNumericCellValue();
System.out.println(d);
Locale.setDefault(Locale.US);
DataFormatter dataformatter = new DataFormatter();
s = dataformatter.formatCellValue(cell);
System.out.println(s);
CellNumberFormatter formatter = new CellNumberFormatter("#.#################%");
s = formatter.format(cell.getNumericCellValue());
System.out.println(s);
workbook.close();
}
}
導致:
所以5.2597614320233098E-2
是價值直接出了XML
的。 0.052597614320233098
是作爲BigDecimal
的值。 0.0525976143202331
是根據IEEE floating point作爲浮點數double
的值。 5.26%
是格式如Excel
中顯示的值。
和5.25976143202331%
是Excel
的公式欄中顯示的值。百分比值是一種例外情況,因爲Excel
在公式欄中也顯示%
格式,但具有完整的有效數字位數(最多15個)。
%
值的例外是因爲Excel
中的%
格式不僅格式化而且還改變了值。 1
= 100%
。因此,如果您將100%
放入Excel
單元中,則會存儲值1
。如果您將10%
放入Excel
單元中,則會存儲值0.1
。
如果你想這一切,你必須把它作爲一個字符串。 – pnuts