Excel 2007 中的数值 - 底层 xml 文件中的表示与存储

2024-06-29

这个问题与.NET和OpenXml有关。

我已经阅读了以下文章,它有很好的解释,但没有回答我的问题:Excel 2007 中数值的可视化与底层 xml 文件不一致 https://stackoverflow.com/questions/5859496/inconsistent-visualization-of-numerical-values-in-excel-2007-vs-the-underlying-x

在我的应用程序中,用户正在上传 Excel (.xls/.xlsx),我正在使用 OpenXML SDK 进行解析。

除了一些值之外,解析工作正常。 Excel 存储的值与某些情况下输入的值不同。以下是用户输入的内容与底层 xml 中存储的内容的一些示例:




+--------------------+-----------------------+--------------------+
| User Entered Value | Excel Displayed Value | Stored XML Value   |
+--------------------+-----------------------+--------------------+
| 4.1                | 4.1                   | 4.0999999999999996 |
+--------------------+-----------------------+--------------------+
| 4.4                | 4.4                   | 4.4000000000000004 |
+--------------------+-----------------------+--------------------+
| 19.99              | 19.99                 | 19.989999999999998 |
+--------------------+-----------------------+--------------------+

  

当我使用 OpenXML 在 .NET 中解析此 Excel 时,我的问题出现了。 OpenXML 将这些值读取为存储为 XML 值的值。因此,即使用户输入 4.1,OpenXML 也会将其读取为 4.0999999999999996。现在,根据我在此 Excel 上运行的验证之一,我需要检查小数点。我无法真正验证用户在这种情况下输入的内容。

任何帮助是极大的赞赏 !!由于OpenXml是Microsoft提供的SDK,因此我没有尝试过任何其他Excel阅读器,但欢迎任何建议。


这是表示浮点类型数据的正确方法。您可以通过以下代码片段来验证这一点。

运行以下代码,

string s = "4.0999999999999996";

Console.WriteLine(float.Parse(s)); 
// output 4.1

string s1 = "4.4000000000000004";

Console.WriteLine(float.Parse(s1)); 
// output 4.4

string s2 = "19.989999999999998";

Console.WriteLine(float.Parse(s2)); 
// output 19.99

所以尝试parse这些值,您将获得预期的真实值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Excel 2007 中的数值 - 底层 xml 文件中的表示与存储 的相关文章

随机推荐