当我读取excel数字单元格值时,我得到带小数的输出。例如:79读数为79.0,读数为0.00。我写的应用程序的代码是:
int type = cell.getCellType();
if (type == HSSFCell.CELL_TYPE_NUMERIC)
System.out.println(cell.getNumericCellValue());
答案 0 :(得分:14)
这个问题在Stack Overflow上出现了很多,所以建议您查看许多类似的问题以查看答案!
Excel将文件格式中的几乎所有数字都存储为浮点值,这就是为什么POI会为数字单元格返回一个双倍的原因,就像那里真正存在的那样。如果您希望它看起来像在Excel中一样,则需要将针对单元格定义的格式设置规则应用于该数字。因此,你想做同样的事情as in my answer here。引用:
您要做的是使用DataFormatter class。你传递了一个单元格,它会尽力返回一个字符串,其中包含Excel为该单元格显示的内容。如果你传递一个字符串单元格,你将得到回来的字符串。如果您传递了一个应用了格式规则的数字单元格,它将根据它们格式化数字并返回字符串。
对于您的情况,我假设数字单元格应用了整数格式规则。如果你要求DataFormatter格式化这些单元格,它会返回一个包含整数字符串的字符串。
您需要做的就是:
// Only need one of these
DataFormatter fmt = new DataFormatter();
// Once per cell
String valueAsSeenInExcel = fmt.formatCellValue(cell);
答案 1 :(得分:1)
我不是100%这会起作用,但我相信你所寻找的是DecimalFormat。
答案 2 :(得分:1)
我假设你正在使用Apache POI。
你应该考虑和DataFormat
一起玩。 Here是一些非常小的草案代码。
否则,如果工作簿中的数据一致,您可能希望将double
返回的getNumericCellValue
四舍五入为int
。
System.out.println((int)Math.round(cell.getNumericCellValue()));
答案 3 :(得分:0)
使用DataFormatter,它将自动检测单元格的格式并生成字符串输出
DataFormatter formatter = new DataFormatter();
String df2 = formatter.formatCellValue(cell);
答案 4 :(得分:0)
仍然有人对此有疑问,可以使用此 https://poi.apache.org/apidocs/dev/org/apache/poi/ss/util/NumberToTextConverter.html
NumberToTextConverter.toText(cell.getNumberiCellValue())