Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AsDataSet()将单分数双值转换为多个分数_C#_Excel_Xlsm - Fatal编程技术网

C# AsDataSet()将单分数双值转换为多个分数

C# AsDataSet()将单分数双值转换为多个分数,c#,excel,xlsm,C#,Excel,Xlsm,在c#中使用ExcelDataReader读取excel工作表数据时,我遇到了一个问题。 我正在从excel工作表(.xlsm)读取数据 其中一个单元格有一个值列表可供选择 例如 5.1 5.2 5.1a 当我选择值5.2或5.1a并读取时,我在数据集中得到了相同的精确值 但当我选择5.1并读取时,数据集中的数据为5.099999996 这是我用来读取c#中数据的代码 注意: 为了解决这个问题,我在单元格中的值5.1后面加了一个空格。然后读取与预期完全相同的值(5.1而不是5.099999996

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

例如

5.1

5.2

5.1a

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

但当我选择5.1并读取时,数据集中的数据为5.099999996

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

注意: 为了解决这个问题,我在单元格中的值5.1后面加了一个空格。然后读取与预期完全相同的值(5.1而不是5.099999996)

但我想知道,当它读取的值5.2完全相同而不应用任何空格时,为什么不适用于5.1

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

谢谢


Karthik

看看这个问题:

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

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


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

问题在于excel中的单元格为通用格式。通用格式Excel界面必须猜测类型,并且猜测错误。根本原因在于驱动程序。这两个excel驱动程序是Jet或ACE。@jdweng我认为他没有使用任何一个驱动程序。。。而是openxml。。。所以根本原因是,数据是如何以7zip格式存储在XMLJus open xlsx文件中的,并检查@Selvin:xlsm文件不是open Xml。Jet或Ace是Excel数据库。Excel是一个前端应用程序,使用Jet或Ace作为后端数据库。xlsm是xlsx,宏5.2作为双精度is
5.200000000017763568394003
。。。5.1双精度is
5.09999999964472863211995
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(fileStream);

DataSet findingsData = excelReader.AsDataSet();