Howdy, ich habe eine DataRow aus einer DataTable aus einem DataSet abgerufen. Ich greife auf eine Spalte zu, die in SQL als Float-Datentyp definiert ist. Ich versuche, diesen Wert auf eine lokale Variable (C# float-Datentyp) zuweisen, sondern eine InvalidCastExecptionWarum unterscheidet sich ein SQL-Float von einem C# -Floss
DataRow exercise = _exerciseDataSet.Exercise.FindByExerciseID(65);
_AccelLimit = (float)exercise["DefaultAccelLimit"];
Jetzt bin immer, das Spiel mit dieser ich habe es funktioniert, aber es hat keinen Sinn, und es didn‘ Ich fühle mich richtig.
_AccelLimit = (float)(double)exercise["DefaultAccelLimit"];
Kann mir jemand erklären, was mir hier fehlt?
Sie sind ähnlich, aber sicherlich nicht gleichwertig. Double unterstützt die Werte von + Infinity, -Infinity und NaN - gemäß der IEEE-Spezifikation, aber SQL float definitiv nicht. und wird Überlauffehler werfen. – Alain
Ich stimme den Kommentaren von Alain May zu, aber ich verstehe noch nicht, warum. Ich habe Fälle gesehen, in denen .net double Zahlen repräsentiert, die SQL float brechen. Beispiele sind Unendlichkeitswerte und bestimmte negative Exponenten, die sich Null nähern. Ich vermute, dass MS für Speichereffizienz optimiert ist. – RaoulRubin
@RaoulRubin: Siehe [MSDN-Dokumentation für TSQL-Floats] (https://msdn.microsoft.com/en-us/library/ms173773.aspx). Sie erwähnen niemals die IEEE-Konformität und geben an, dass sie einem unbenannten ISO-Standard folgt. Eine schnelle Suche ergibt [ISO/IEC 10967] (https://en.wikipedia.org/wiki/ISO/IEC_10967), die besagt, dass es mit IEEE 754 kompatibel ist, aber keine vollständige Implementierung garantiert. –