簡體   English   中英

數據准確性損失為excel單元格c#添加值

[英]data accuracy loss adding values to excel cell c#

早上,我在使用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];
    }
}

一開始我沒有if,我正在將string添加到string中。 結果是:

    workSheet.Cells[z, j].value 2.01404290302382E+16    dynamic {double}
    bill.BillNumber "20140429030238239" string

當我在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.Worksheet

根據Double文檔

所有浮點數還具有有限數量的有效數字,這也決定了浮點值逼近實數的精度。 盡管在內部最多保留17位數字,但Double值最多具有15位精度的十進制數字。

(我的重點)

因此,只要轉換為浮點值,在精度受到影響之前,您將只能使用有限的數字。

Excel也有同樣的問題,它也不以無限的精度存儲數字,盡管我不知道它使用的確切限制,但我想它會接近.NET所使用的內容,因為.NET使用標准類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM