Heim >Datenbank >MySQL-Tutorial >Warum löst die Umwandlung eines SQL-Floats in einen C#-Float eine InvalidCastException aus?
Diskrepanz zwischen SQL Float und C# Float
Beim Abrufen eines Werts aus einer SQL-Datenbank mit einem Float-Datentyp und dem Versuch, ihn einem zuzuweisen Wenn Sie eine C#-Variable vom Typ float verwenden, kann es zu einer InvalidCastException kommen. Dies liegt daran, dass der SQL-Float-Datentyp einem Double in C# entspricht.
Beispiel:
Betrachten Sie den folgenden Code:
DataRow exercise = _exerciseDataSet.Exercise.FindByExerciseID(65); _AccelLimit = (float)exercise["DefaultAccelLimit"]; // Throws InvalidCastException
Grund für die Ausnahme:
Die explizite Umwandlung von Objekt in Float im obigen Code kann nicht durchgeführt werden weil der zugrunde liegende Datentyp ein Double ist. SQL-Floats werden als 64-Bit-Gleitkommawerte gespeichert, die sich von den 32-Bit-Gleitkommawerten unterscheiden, die durch den C#-Float-Datentyp dargestellt werden.
Lösung:
Um dieses Problem zu beheben, können Sie den abgerufenen Wert explizit in ein Double konvertieren, bevor Sie ihn in einen Float umwandeln:
_AccelLimit = (float)(double)exercise["DefaultAccelLimit"];
Diese Konvertierung stellt dies sicher Der abgerufene Wert wird ordnungsgemäß in ein Double umgewandelt und dann in einen Float konvertiert, um dem deklarierten Datentyp der Variablen zu entsprechen.
Das obige ist der detaillierte Inhalt vonWarum löst die Umwandlung eines SQL-Floats in einen C#-Float eine InvalidCastException aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!