ExcelDataReader.AsDataSet()将单分数双精度值转换为多个分数

时间:2020-10-09 08:51:48

标签: c# excel xlsm

在c#中使用ExcelDataReader读取Excel工作表数据时遇到问题。 我正在从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无效?

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

谢谢

Karthik

1 个答案:

答案 0 :(得分:0)

看看这个问题:Why can't decimal numbers be represented exactly in binary?

我的数学还不能完全弄清楚(欢迎评论),但我怀疑5.1不能精确地转换为C#的两倍,而5.2可以。

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

我希望,如果您在源电子表格中将所有单元格显式设置为文本格式,则将按预期读取值