簡體   English   中英

精確丟失而批量使用SqlBulkCopy將記錄插入SQL

[英]Precision Lost while Bulk Inserting records into SQL using SqlBulkCopy

我使用以下代碼批量插入數據表到我的SQL表:

 // Set up the bulk copy object.  
                using (SqlBulkCopy bulkCopy =
                           new SqlBulkCopy(destinationConnection.Connection))
                {
                    bulkCopy.DestinationTableName =
                        Constants.ReportDataTable;

                    // Write from the source to the destination.
                    DataTable dtBulk = GetDatatableInReportDataFormat(dt, objectName, version);
                    bulkCopy.WriteToServer(dtBulk);//To get the Datatable in the SQL table format

                }

我的SQL表中有一個名為“Value”的列,其類型為十進制(28,5)。 我的問題是一些帶有十進制數的值正在被自動舍入,因此我失去了精度,例如0.72768的值被保存為0.72767

在Datatable中,“Value”列的類型為Double。

任何人都有想法嗎? 謝謝

使DataTable列為decimal而不是double ...我強烈懷疑這會使問題消失。

雙精度的小數精度不固定,即使它是128位或更高。 所以這不是“舍入錯誤”。 簡單地說,雙倍不能保證代表有限小數點范圍內的所有實數。 當試圖存儲非常接近零的更大數字或數字時,這種精度損失會增加得更多。

http://en.wikipedia.org/wiki/Double-precision_floating-point_format

如果您要存儲需要保證十進制精度的實數,如貨幣值,經度/緯度或類似值,則將它們存儲為十進制類型。

一個uppdate:實際上沒有使用double(或單個/ float)修復精度如果你存儲了很大的數字那么就會有你無法表示的整數因為精度損失而且如果計算產生這樣的值那么最接近的可表示整數將是計算和存儲而不是。

暫無
暫無

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

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