Ich lese ein Fließkommafeld in ein C# -Doppelfeld. Der DB-Wert 0,1 wird als 0.10000000149011612 gelesen. Ich finde das merkwürdig, da die Antworten dieser Frage darauf eingehen, dass FLOAT
8 Bytes verwendet, was sicher genug ist für 0,1?SqlServer kann 0.1 nicht genau in einem FLOAT-Feld speichern?
SQL Server verwendet entweder 4 Bytes oder 8 Bytes, um nicht-dezimale Gleitkommazahlen zu speichern.
Wenn Sie echte oder einen beliebigen Wert im Bereich Float < 1> angeben schweben < 24> verwendet SQL Server < 24> intern schweben. Wenn Sie float oder irgendetwas in den Bereich float < 25> float < 53> (die Grenze) verwenden, verwendet es Float < 53> die ist sonst bekannt als doppelte Genauigkeit.
Meine Tabelle hat Feld vom Typ FLOAT
die @Result FLOAT OUT
von einer gespeicherten Prozedur mit dem Parameter gelesen und zurückgegeben.
Mein C# -Code wie folgt aussieht, beachten Sie verwendet es die Float
Typ nicht Real
:
//setting up the query
command.Parameters.Add("@Result", SqlDbType.Float).Direction = ParameterDirection.Output;
//reading the value
double result = Convert.ToDouble(command.Parameters["@Result"].Value);
Sollte dies funktionieren ... oder tut eine SqlServer FLOAT Arbeit anders als ein normaler double
Typ in Sprachen wie C# ? Sollte 0,1 genau gespeichert werden und nicht zurückgegeben werden? Wenn ich Real
verwenden würde, wäre ich nicht überrascht, aber ich dachte, Float
sollte sehr genau sein. Oder zumindest hätte eine eingeschränkte Präzision falsche Zahlen nicht einzuführen ...
Nein float ist ein ungefährer Datentyp und ist nicht vollständig genau. https://docs.microsoft.com/en-us/sql/t-sql/data-types/float-and-real-transact-sql –
Nun, der Standard für Float ist 53 gibt es eine Genauigkeit von 15 Ziffern obwohl Du hast dort mehr Ziffern. Aber ich würde nur Dezimal (Länge, Präzision) verwenden – scsimon
@SeanLange sicher, keine fp Darstellung kann absolut genau sein. Bei der Arbeit mit C# -Doppel-Typen sehe ich normalerweise keine Ungenauigkeiten wie diese. Ist es ein Unterschied in der Art und Weise, in der .Net und SqlServer Fließkommazahlen darstellen? –