Dot-Net
使用 SqlBulkCopy 將記錄批量插入 SQL 時精度失去
我正在使用以下程式碼將數據表批量插入到我的 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.在數據表中,“值”列的類型為 Double。
任何機構有一個想法?感謝
使列中的
DataTableasdecimal而不是double……我強烈懷疑這會使問題消失。
double 的十進制精度不是固定的,即使它是 128 位 double 或更高。所以這不是“舍入錯誤”。簡單地說,雙精度數不能保證代表有限小數點範圍內的所有實數。當嘗試儲存更大的數字或非常接近於零的數字時,這種精度損失會進一步增加。
http://en.wikipedia.org/wiki/Double-precision_floating-point_format
如果您要儲存需要保證十進制精度的實數,例如貨幣值、經度/緯度或類似值,則將它們儲存為十進制類型。
更新:實際上,如果您儲存非常大的數字,則雙精度(或單/浮點)沒有固定精度,那麼將有您無法表示的整數,因為精度損失並且如果計算應該導致這樣的值,那麼最接近的可表示整數將是而是計算和儲存。