首页 > 解决方案 > ExcelDataReader.AsDataSet() 将单个分数双精度值转换为多个分数

问题描述

在 c# 中使用 ExcelDataReader 读取 excel-sheet 数据时遇到问题。我正在从 excel-sheet(.xlsm) 读取数据其中一个单元格有一个可供选择的值列表。

例如。

5.1

5.2

5.1a

当我选择值 5.2 或 5.1a 并读取时,我在数据集中得到相同的确切值

但是当我选择 5.1 并阅读时,我在数据集中得到 5.0999999999999996

这是我用来在c#中读取数据的代码,

IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);

DataSet findingsData = excelReader.AsDataSet();

注意: 作为一种解决方法,我在单元格中的值 5.1 之后放置了一个空格。然后它读取的值与预期的完全相同(5.1 而不是 5.0999999999999996)。

但我想知道,当它在不应用任何空间的情况下读取值 5.2 完全相同时,为什么对 5.1 不起作用?

欢迎任何建议来解决这个问题......

谢谢,

卡尔提克

标签: c#excelxlsm

解决方案


看看这个问题:为什么十进制数不能用二进制精确表示?

我的数学并不能准确地计算出来(欢迎评论),但我怀疑 5.1 不能精确地转换为 C# double,但 5.2 可以。

添加空格时它起作用的原因是 Excel 将假定该字段是文本,就像 5.1a 一样,但是当它收到看起来像数字的东西时,它假定它是一个数字。(您可以在默认的空白电子表格中看到此行为,因为如果它是数字,它将右对齐,而当您添加空格或任何其他文本时,它将左对齐)。

我希望如果您在源电子表格中将所有单元格显式格式化为文本,那么该值将按您的预期读取


推荐阅读