【问题标题】:Datatable loaded with Microsoft.ACE.OLEDB.12.0 has higher precision than Excel workbook加载 Microsoft.ACE.OLEDB.12.0 的数据表比 Excel 工作簿具有更高的精度
【发布时间】:2013-09-19 04:22:27
【问题描述】:

我正在通过System.Data.OleDb.OleDbConnection VB.net 中的filehandler 上传货币汇率工作簿。

在 Excel 表中查看费率时,我看到 0.55865921787709500000
在调试模式下查看数据表中相同的速率,我看到0.55865921787709480000

在 Excel 中,小数位设置为 20 - 似乎只是在小数位 15 后补零。

我已尝试将单元格读取/写入文本文件(相同的“500000”结果)。
尝试将工作簿保存为逗号分隔的文本文件 - 相同的 '500000' 结果。

费率工作表是从另一个网站创建的。我试图在工作表中添加第 16 个数字,但在我移出单元格后它会翻转回零。我知道 Excel 有 16 位的精度限制。在这种情况下,它似乎存储了更多。

除了检查数据表之外,还有什么方法可以查看工作簿中的实际存储值?

【问题讨论】:

  • 您有权更改哪些内容?我们可以看看您可以更改的代码吗?
  • 我可以更改导入代码以截断多余的数字。我在问为什么当您在 Excel 中查看数字时 Excel 选择存储超过 15 个有效数字并隐藏 #16。工作簿的 OLEdb 读取产生的数据表显示 16 位,工作簿显示 15。
  • 我是由一位同事处理的。原始价目表由 Crystal Reports 生成。他能够在 Google Docs 下查看费率表,并显示了额外的数字。为了回答我自己的问题,Excel 存储了超过 15 个有效数字,具体取决于创建 Excel 文件的应用程序。

标签: vb.net excel


【解决方案1】:

Excel 保留超过 15 个有效数字 - 取决于创建原始 Excel 文档的系统。在本例中,文档是由 Crystal Reports 生成的。可以使用 OLEDB 连接对 Excel 电子表格或通过 Excel 的 Google Docs 版本查看“额外”有效数字。
在这种特殊情况下,我必须使 SQL 存储的费率与电子表格相匹配。我将每个汇率转换为小数和字符串。我使用该字符串来定位速率中的周期并开始计算出现在小数点后的连续零。这个计数被添加到 15 作为系统小数点的位数。四舍五入的数字与在 Excel 中查看信息时显示的数字相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多