c# - 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 不起作用?
欢迎任何建议来解决这个问题......
谢谢,
卡尔提克
解决方案
看看这个问题:为什么十进制数不能用二进制精确表示?
我的数学并不能准确地计算出来(欢迎评论),但我怀疑 5.1 不能精确地转换为 C# double,但 5.2 可以。
添加空格时它起作用的原因是 Excel 将假定该字段是文本,就像 5.1a 一样,但是当它收到看起来像数字的东西时,它假定它是一个数字。(您可以在默认的空白电子表格中看到此行为,因为如果它是数字,它将右对齐,而当您添加空格或任何其他文本时,它将左对齐)。
我希望如果您在源电子表格中将所有单元格显式格式化为文本,那么该值将按您的预期读取
推荐阅读
- asp.net-mvc - 如何修复:开始和结束时间
- python - 提高使用 google vision api 检测到的手写文本的置信度分数
- capistrano - 如何在生产服务器上部署和配置thinking sphnix
- python - 字符串清洗
- c# - 如何用 C# 中的存储过程解决这个问题?
- javascript - 使用 Auth0 的应用程序在刷新时进入登录页面
- sql - 在php中显示正确的数据格式
- directory - 即使文件出现在源文件夹中,CFdirectory 标记也不显示目录中的文件
- javascript - 表单插入数据库不能异步工作
- android - 如何提高 RecyclerView 的性能?