【发布时间】:2014-06-03 10:12:47
【问题描述】:
我在理解 Excel 对单元格值的处理方面遇到了一些困难,这些单元格值在 IEEE 754 浮点中不能完全表示。
我的激励示例可以通过将 Excel 2010 或 2013 中的电子表格以 xlsx 格式保存,并在表格 1 的单元格 A1 中保存一个数字。
然后,编辑底层 XML 并将该单元格的值替换为如下所示:
<v>62408.000000000007</v>
该数字有 17 位有效数字,不能用 IEEE 754 浮点数精确表示。
在 Java 和 Python 中将字符串“62408.000000000007”解析为双精度浮点数会得到 62408.00000000001,它的有效数字少了一位,并且可以精确表示。这两种编程语言都声称实现了 IEEE 754(的子集)。
但是,带有该文件的 Excel 2010 和 2013 在 UI 中显示 62408(无论您在数字格式中指定多少个小数位,小数点后只会出现零)。所以 Excel 似乎将该单元格值准确解析为 62408。
任何人都可以为我指出有关应用程序应如何从单元格内的 SpreadsheetML (xlsx) 文件的 v 元素中解析浮点数的权威参考吗?
还有一个有用的参考是关于 Excel 是如何做到的。
我已尝试检查http://www.ecma-international.org/publications/standards/Ecma-376.htm 上的 Office Open XML 标准参考文档
但是,除了在这种情况下发现 v 元素的类型为 ST_Xstring 之外,我找不到任何关于如何解析单元格值的信息,尤其是数字。
【问题讨论】: