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
Machen Sie die Spalte in DataTable
als decimal
und nicht als double
... Ich vermute stark, dass dies das Problem verschwinden lässt.
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.
Tags und Links sql .net sql-server-2008 sqlbulkcopy bulkinsert