Excel 2007中的数值 - 基础xml文件中的表示与存储

时间:2015-02-13 00:00:20

标签: c# .net excel openxml

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

我已经阅读了以下文章,它有很好的解释,但不是我的问题的答案: Inconsistent visualization of numerical values in Excel 2007 vs the underlying xml file

在我的应用程序中,用户正在上传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读者,但欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

这是表示浮点类型数据的正确方法。您可以按照以下代码段进行验证。

运行以下代码

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这些值,您将获得预期的真实值。