我正在使用apache中的POI来读取java程序中的Excel文件。 excel有我用Java重现的宏,但是当我比较结果时,我试图尽可能地消除小的舍入差异。 下载POI 3.13的代码并在调试模式下运行后,我意识到他们没有处理像Excel这样的数字,它只使用了15位数字并且之后添加了非重要的0,而是使用了17位数的表示。你可以看到here。 但是更深入,似乎POI正在使用openxml并且openxml Cell已经将浮点数存储在17位而不是15位...所以在我看来openxml中处理数字有一个错误,但我很惊讶那个"大"由于我没有发现任何关于浮点数的错误处理,因为我找不到任何相关信息。
所以我的问题是:在使用POI时,是否有解决方法可以获得完全相同的15位Excel?更好的是,openxml可以在此问题上更正像Excel一样吗?
答案 0 :(得分:2)
但我感到非常惊讶的是,之前没有发现“大”处理浮点数的事情
Excel对浮点的使用是错误的,在this article的§2中有详细记载。当微软真的是53位二进制浮点数时,微软试图假装值为15位十进制浮点的尝试很糟糕,只会让事情变得更糟,而不是模仿它,你应该避免使用Excel进行严肃的计算。以下是§2结论的引用:
Excel的用户如何预测显示哪些功能而不是实际值?在显示之前哪些表达式是美化的?如果没有这些问题的意识就无法调试用户的程序,并且有意识的用户最终会调试微软虔诚的欺诈行为,而不仅仅是发生故障的Excel电子表格。