使用Microsoft.ACE.OLEDB.12.0加载的数据表具有比Excel工作簿更高的精度

时间:2013-09-16 19:33:25

标签: vb.net excel

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

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

在Excel下,小数位设置为20 - 似乎只是在小数位15之后填充零。

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

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

有没有办法查看工作簿中的实际存储值 - 除了检查数据表?

1 个答案:

答案 0 :(得分:0)

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