数据精度损失增加值的Excel单元格c#
早上,我有一个与Excel单元格工作的准确性问题。
在下面的代码中,我创build了一个包含我所有类组件的数组,以便于添加数据。 所有这些都是string,我已经检查过,在添加到Excel单元格之前,数据是正确的。
string[] row = { bill.BillNumber, "\t", bill.ContractNumber, (more data...)}; for (int j = 1; j <= row.Length; j++) { if (j - 1 == 0) { float bin = 0; float.TryParse(row[j - 1], out bin); workSheet.Cells[z, j] = bin; } else { workSheet.Cells[z, j] = row[j - 1]; } }
一开始我没有,如果我添加string串到细胞。 结果是:
workSheet.Cells[z, j].value 2.01404290302382E+16 dynamic {double} bill.BillNumber "20140429030238239" string
当我在Excel中更改单元格格式时,数字会变成近似值。 如果我在string之前进行parsing,
bin 2.01404288E+16 float workSheet.Cells[z, j].value 20140428795838464.0 dynamic {double} bill.BillNumber "20140429030238239" string
而当我这样做,但格式很长,我得到一个非常近似的结果,但不是确切的:
bin 20140429030238239 long workSheet.Cells[z, j].value 20140429030238240.0 dynamic {double} bill.BillNumber "20140429030238239" string
这是我的第一select,但是如果我没有得到正确的结果,我试了其他两个。 我没有更多的想法,为什么我失去了准确性?
先谢谢了。
问候。
PS:我没有说woorksheet是一个Excel.Worksheet
根据Double的文档 :
所有浮点数的有效数字也是有限的,这也决定了浮点数的精确度接近实数。 Double值最多有15个十进制数字的精度,尽pipe内部最多保留17位数字。
(我的重点)
所以只要你转换成一个浮点数值,在准确性遭受损失之前你将有可用的数字。
Excel也有同样的问题,它不会以无限的精度存储数字,虽然我不知道它使用的具体限制,但是我可以想象.NET会使用标准types。
- Excel Interop COMException HRESULT:0x800A03EC访问隐藏的单元格时
- 通过自己的应用程序运行/驱动Excel
- 使用VBA和.Net自动化Excel的优点和缺点
- 这个代码工作VB,但在VB.NET中,例外,为什么?
- 通过Microsoft.Office.Interop.Excel确定Excel版本/文化
- 导出SQL Server到Excel – post太多?
- 如何提高在OpenXml Excel电子表格工具中从SharedStringTable中检索值的性能?
- 如何在vb.net中的gridview导出后减lessExcel工作簿的权重
- 在VSTO Excel中,如何检测单元格中的数据?