我使用apache poi 3.10-FINAL并且从excel表中读取数字时会出现一种非常奇怪的行为:实际上,0.001306上的cell.getNumericCellValue()的结果不是0.001306但是:0.0013059999999(!)。并且2587441349.95676变为2.5874413499567585E9。
我尝试了很多不同的东西,比如在读取它之前将单元格的类型更改为“String”(无论如何,数字值在读取后立即变为字符串值...),或者使用getRawValue()方法但是如果值是好的,格式不是:0.001306变为1.306E-3,我不能应用格式规则,因为没有真正的格式化规则,唯一的规则是:它必须像在excel表中一样(一个值可以是00.001306,另一个可以是1.306E-3 ......)
我尝试使用“格式化单元格”按钮在Excel工作表中进行更改,但它不会更改任何内容。这些数字数据被视为字符串值的唯一情况是在前面放置一个简单的引用数字。
而且......我不明白为什么,但似乎我是唯一一个在地球上遇到这样问题的人......?
(抱歉我的英语不好......)
答案 0 :(得分:2)
宣传对答案的评论
欢迎来到wonderful world of Floating Point numbers! Excel .xlsx
文件始终将其数字存储为浮点数的字符串表示形式,.xls
几乎在所有情况下都存在,即使对于简单的整数值也是如此。
默认情况下,Apache POI会返回存储在文件中的值。如果值不是十进制浮点表示中的精确值,就像您的情况一样,您将获得与文件中不完全相同的值。
但是,如果您想要的是"一个看起来像Excel为该单元显示的字符串",那么Apache POI有一个方便的实用工具方法,根据格式为您进行舍入/格式化应用于单元格的规则。该课程为DataFormatter,您想要的方法是DataFormatter.formatCellValue(Cell)