Precision Lost while Bulk Einfügen von Datensätzen in SQL mithilfe von SqlBulkCopy

8

Ich verwende den folgenden Code zum Massen Einfügen einer Datentabelle in meine SQL-Tabelle:

%Vor%

Ich habe eine Spalte in meiner SQL-Tabelle namens "Value", deren Typ ist dezimal (28,5). Mein Problem ist, dass einige Werte mit Dezimalzahlen automatisch gerundet werden, daher verliere ich die Genauigkeit, zum Beispiel wird ein Wert von 0.72768 als 0.72767 gespeichert.

In der Datentabelle ist die Spalte "Value" vom Typ Double.

Jeder Körper hat eine Idee? Danke

    
Hassan Mokdad 30.06.2013, 14:30
quelle

2 Antworten

7

Machen Sie die Spalte in DataTable als decimal und nicht als double ... Ich vermute stark, dass dies das Problem verschwinden lässt.

    
Marc Gravell 30.06.2013, 14:34
quelle
3

Die Dezimalgenauigkeit eines Double ist nicht festgelegt, auch wenn es ein 128-Bit-Double oder höher ist. Es ist also kein "Rundungsfehler". Einfach gesagt, ein Double repräsentiert nicht alle reellen Zahlen innerhalb eines begrenzten Dezimalpunktbereichs. Dieser Genauigkeitsverlust erhöht sich noch mehr, wenn man versucht, größere Zahlen oder Zahlen zu speichern, die nahe bei Null liegen.

Ссылка

Wenn Sie reelle Zahlen speichern, die Garantien über die Dezimalgenauigkeit wie Geldwerte, Längen- / Breitengrade oder Ähnliches benötigen, speichern Sie sie als Dezimaltyp.

Ein update: eigentlich wird keine Genauigkeit mit double (oder single / float) festgelegt, wenn Sie wirklich große Zahlen speichern, dann gibt es Integer, die Sie nicht darstellen können, weil die Genauigkeit nicht genau ist und wenn eine Berechnung zu einem solchen Wert führen sollte Ganzzahl wird berechnet und stattdessen gespeichert.

    
Kaveh Hadjari 15.10.2013 13:02
quelle