ExcelDataReader.AsDataSet() 将单分数double值转换为多分数

ExcelDataReader.AsDataSet() converts single fraction double value into multiple fractions

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

Eg.

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 之后放置了一个 space。然后它读取的值与预期完全相同(5.1 而不是 5.0999999999999996)。

但我想知道,当它读取值 5.2 时完全相同而不应用任何 space,为什么 5.1 不起作用?

欢迎提出解决此问题的任何建议...

谢谢,

卡尔提克

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

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

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

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