Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 向excel单元格c添加值时数据准确性损失#_C#_.net_Excel_Cell_Precision - Fatal编程技术网

C# 向excel单元格c添加值时数据准确性损失#

C# 向excel单元格c添加值时数据准确性损失#,c#,.net,excel,cell,precision,C#,.net,Excel,Cell,Precision,早上好,我在使用excel单元格时遇到了精度问题 在下面的代码中,我创建了一个包含所有类组件的数组,以简化数据添加。所有这些都是字符串,在添加到excel单元格之前,我已经检查了数据是否正确 string[] row = { bill.BillNumber, "\t", bill.ContractNumber, (more data...)}; for (int j = 1; j <= row.Length; j++) { if (j - 1 == 0) {

早上好,我在使用excel单元格时遇到了精度问题

在下面的代码中,我创建了一个包含所有类组件的数组,以简化数据添加。所有这些都是字符串,在添加到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];
    }
}
当我在excel中更改单元格格式时,数字将变为近似值。 如果我在字符串之前进行分析,则会发生以下情况:

    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
这是我的第一个选择,但好像我没有得到正确的结果,我尝试了另外两个。我没有更多的想法,为什么我会失去准确性

提前谢谢

你好

PS:我没有说过woorksheet是一个
Excel.工作表

,根据:

所有浮点数的有效位数也有限,这也决定了浮点数逼近实数的精度双精度值最多有15位小数,但内部最多保留17位。

(我的重点)

因此,只要您转换为浮点值,在精度受到影响之前,您将有有限的可用数字


Excel也有同样的问题,它也不能无限精确地存储数字,尽管我不知道它的具体操作限制,但我可以想象它与.NET使用的标准类型非常接近。

我找到了“解决方案”,但问题仍然存在。
行[j-1]=“'”+行[j-1];工作表.单元格[z,j]=行[j-1]使用此代码,我得到下一个:
工作表。单元格[z,j].value=“20140429030238239”动态{string}bill.BillNumber=“20140429030238239”string
但是……我认为您的问题是Excel无法处理如此庞大的数字。在VBA中查找限制。可以帮助您的是将Range的.NumberFormat属性更改为TEXT,这样您就可以将其存储为字符串而不是实际值number@mehowExcel管理此类数字没有任何问题,因为我从另一个Excel文件中获取数据。我的问题是当我将数据再次放入文件时。无论如何,如果将“'”放在字符串数组的前面,excel会将其解释为文本,而不存在四舍五入。无论如何,谢谢你。
    bin 20140429030238239   long
    workSheet.Cells[z, j].value 20140429030238240.0 dynamic {double}
    bill.BillNumber "20140429030238239" string