Wat vertegenwoordigt een dubbele in sql-server?

Ik heb een aantal eigenschappen in C#die doublezijn en ik wil deze opslaan in een tabel in SQL Server, maar merkte op dat er geen doubletype, dus wat is het beste om te gebruiken, decimalof float?

Hiermee worden de breedte- en lengtegraadwaarden opgeslagen, dus ik heb de meest nauwkeurige precisie nodig.

Bedankt voor de reacties tot nu toe.


Antwoord 1, autoriteit 100%

float

Of als je ouderwets wilt gaan:

real

Je kunt ook float(53) gebruiken, maar dat betekent hetzelfde als float.

(“echt” is gelijk aan float(24), niet float/float(53).)

Het decimal(x,y)SQL Server-type is voor wanneer u exactedecimale getallen wilt in plaats van drijvende komma (wat benaderingen kunnen zijn). Dit is in tegenstelling tot het C# “decimale” gegevenstype, dat meer lijkt op een 128-bits drijvende-kommagetal.

MSSQL’s floattype is gelijk aan het 64-bits doubletype in .NET. (Mijn oorspronkelijke antwoord uit 2011 zei dat er een klein verschil in mantisse zou kunnen zijn, maar ik heb dit in 2020 getest en ze lijken 100% compatibel te zijn in hun binaire weergave van zowel zeer kleine als zeer grote getallen — zie https://dotnetfiddle.net/wLX5Oxvoor mijn test).

Om de zaken nog verwarrender te maken: een “float” in C# is slechts 32-bits, dus het zou in SQL meer equivalent zijn aan het real/float(24)-type in MSSQL dan float/float(53).

p>

In uw specifieke gebruiksgeval…
Het enige wat je nodig hebt zijn 5 plaatsen achter de komma om de lengte- en breedtegraad weer te geven met een nauwkeurigheid van ongeveer een meter, en je hebt maximaal drie cijfers voor de komma nodig voor de graden. Float(24) of decimal(8,5) passen het beste bij uw behoeften in MSSQL, en het gebruik van float in C# is goed genoeg, u heeft geen double nodig. In feite zullen uw gebruikers u waarschijnlijk bedanken voor het afronden op 5 decimalen in plaats van een hoop onbeduidende cijfers mee te nemen voor de rit.


Antwoord 2, autoriteit 17%

Ook hieris een goed antwoord voor SQL-CLR Type Mapping met een handige grafiek.

Van dat bericht (door David):


Antwoord 3, autoriteit 4%

float is het dichtstbijzijnde equivalent.

SqlDbType-telling

Voor Lat/Lang zoals OP vermeld.

Een meter is 1/40.000.000 van de breedtegraad, 1 seconde is ongeveer 30 meter. Float/double geeft je 15 significante cijfers. Met wat snelle en onbetrouwbare hoofdrekenen… zouden de afrondings-/benaderingsfouten ongeveer de lengte van deze vulstop zijn -> “.”


Antwoord 4, autoriteit 2%

Je moet het toewijzen aan FLOAT(53) – dat is wat LINQ to SQL doet .


Antwoord 5, autoriteit 2%

floatin SQL Server heeft [edit:bijna] de precisie van een “double” (in C#-zin).

floatis een synoniem voor float(53). 53 zijn de stukjes van de mantisse.

.NET doublegebruikt 54 bits voor de mantisse.


Antwoord 6

voor SQL Sever:

Decimal-type is 128 bit ondertekend nummer
Float is een getekend nummer van 64 bit.

Het echte antwoord is float , ik was onjuist over decimaal.

De reden is als u een decimaal gebruikt, vult u nooit 64 bit van het decimale type.

Hoewel decimaal u geen fout geeft als u probeert een INT-type te gebruiken.

hier is een leuk referentiekaart van de typen.


Antwoord 7

Het klinkt alsof je kunt kiezen en kiezen. Als u float kiest, kunt u 11 cijfers van precisie verliezen. Als dat acceptabel is, ga ervoor, blijkbaar dachten de LINQ-ontwerpers dit een goede afweging te zijn.

Als uw aanvraag echter die extra cijfers nodig heeft, gebruikt u decimaal. Decimal (correct geïmplementeerd) is hoe dan ook veel nauwkeuriger dan een vlotter – geen rommelige vertaling van basis 10 naar basis 2 en terug.


Antwoord 8

A FloatVertegenwoordigt doublein SQL Server. Je kunt een bewijs vinden uit de codering in C # in Visual Studio. Hier heb ik Overtimeals een Floatin SQL Server en in C #. Dus ik kan

converteren

int diff=4;
attendance.OverTime = Convert.ToDouble(diff);

HIER OverTimewordt gedeclareerd float type

Other episodes