Excel 2007 中的数值 - 底层 xml 文件中的表示与存储
Numerical values in Excel 2007 - representation vs storage in the underlying xml file
此问题与 .NET 和 OpenXml 有关。
我已经看过下面的文章,它有很好的解释,但不是我问题的答案:
Inconsistent visualization of numerical values in Excel 2007 vs the underlying xml file
在我的应用程序中,用户正在上传 Excel (.xls/.xlsx),我正在使用 OpenXML SDK 进行解析。
解析工作正常,除了一些值。 Excel 存储的值与某些场景中输入的值不同。以下是用户输入的内容与底层 xml:
中存储的内容的一些示例
+--------------------+--------------------+---- --------------+
|用户输入的值 | Excel 显示值 |存储 XML 值 |
+--------------------+--------------------+---- --------------+
| 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
这些值,您将获得预期的真实值。
此问题与 .NET 和 OpenXml 有关。
我已经看过下面的文章,它有很好的解释,但不是我问题的答案: Inconsistent visualization of numerical values in Excel 2007 vs the underlying xml file
在我的应用程序中,用户正在上传 Excel (.xls/.xlsx),我正在使用 OpenXML SDK 进行解析。
解析工作正常,除了一些值。 Excel 存储的值与某些场景中输入的值不同。以下是用户输入的内容与底层 xml:
中存储的内容的一些示例+--------------------+--------------------+---- --------------+ |用户输入的值 | Excel 显示值 |存储 XML 值 | +--------------------+--------------------+---- --------------+ | 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
这些值,您将获得预期的真实值。