数据精度损失增加值的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。