Что представляет собой double в sql server?
14 ответов
float
или если вы хотите пойти старой школы:
real
вы также можете использовать float (53), но это означает то же самое, что и float.
("реальный" эквивалентен float(24), а не float/float(53).)
на decimal (x,y) тип SQL Server для Когда вы хотите точно десятичные числа, а не с плавающей запятой (которые могут быть приближениями). Это в отличие от типа данных c# "decimal", который больше похож на 128-битный плавающий номер точки.
MSSQL float нет ровно та же точность, что и 64-битный двойной введите .NET (небольшая разница в mantissa IIRC), но это достаточно близко для большинства применений.
чтобы сделать вещи более запутанными, "float" в C#-это только 32-бит, поэтому он был бы более эквивалентен в SQL типу real/float(24) в MSSQL, чем float/float(53).
в вашем конкретном случае использовать... Все вам нужно 5 мест после десятичной точки, чтобы представить широту и долготу с точностью около одного метра, и вам нужно только до трех цифр до десятичной точки для градусов. Float (24) или decimal(8,5) лучше всего соответствуют вашим потребностям в MSSQL, а использование float в C# достаточно хорошо, вам не нужен double. На самом деле, ваши пользователи, вероятно, поблагодарят вас за округление до 5 знаков после запятой, а не за кучу незначительных цифр, идущих вместе для поездки.
вот сопоставления типов данных CLR с SQL Server:http://msdn.microsoft.com/en-us/library/system.data.sqldbtype.aspx
как большинство других отметили,float
Это правильный ответ. См.документация Microsoft по сопоставлению типов данных SQL Server - CLR для получения дополнительной информации.
float является ближайшим эквивалентом.
Edit:
для Lat / Long, как упоминалось OP.
метр 1/40, 000, 000 широты, 1 секунда около 30 метров. Float / double дают вам 15 значимых цифр. С помощью быстрой и хитрой арифметики... ошибки округления / аппроксимации будут примерно равны длине этой остановки заполнения ->"."
float
в SQL Server фактически имеет [edit:almost] точность "double" (в смысле C#).
float
синоним float(53)
. 53-это кусочки мантиссы.
.NET double
использует 54 бита для мантиссы.
есть отличный поток на MSDN описание основной разницы между FLOAT и DECIMAL. Короче говоря, Float является приблизительным и не может представлять некоторые значения.
посмотрите на принятый ответ.
для SQL Sever:
Decimal тип 128 бит подписанное число Float-это 64-битное число со знаком.
ответ Float, Я был неправ насчет decimal.
причина в том, что если вы используете десятичный, вы никогда не будете заполнять 64 бит десятичного типа.
хотя decimal не даст вам ошибку, если вы попытаетесь использовать тип int.
здесь является хорошей справочной диаграммой типов.
@Отличные Ахиллес! Пришел сюда за двойником, остался за крошкой.
вот частично выполненный случай переключения для преобразования между dataTable и SQL:
switch (columnDataTypeList[i])
{
case "System.String":
columnDataTypeList[i] = "VARCHAR(MAX)";
break;
case "System.Int32":
columnDataTypeList[i] = "INT";
break;
case "System.DateTime":
columnDataTypeList[i] = "DATE";
break;
case "System.Double":
columnDataTypeList[i] = "FLOAT";
break;
}
строка может быть проблемой обязательно отредактируйте ее в соответствии с вашими потребностями,но двойной должен работать, что является вопросом.
похоже, вы можете выбрать и выбрать. Если вы выберете float, вы можете потерять 11 цифр точности. Если это приемлемо, идите на это-очевидно, дизайнеры Linq думали, что это хороший компромисс.
однако, если вашему приложению нужны эти дополнительные цифры, используйте decimal. Decimal (реализован правильно) является более точным, чем float в любом случае-нет беспорядочного перевода с базы 10 на базу 2 и обратно.
разве в системе еще нет сопоставлений.Данные.Занятия по SQL?
посмотреть: C#: эквиваленты типов данных SQL Server в .NET Framework.
теперь сделайте мой поплавок...
в случае, если это полезно, ниже приведена ссылка, на которую я обычно ссылаюсь (я оказался в этой теме На первом Google на этот раз!).
Он имеет дополнительную информацию к предыдущим ссылкам, опубликованным, поскольку он показывает процедуры и перечисления SqlDataReader (в дополнение к сопоставлениям типов .NET и SQL)
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings
(и да поплавок!)
Float
представляет double в SQL server
. Вы можете найти доказательство из кода в C#
в visual studio. Здесь я объявил овертайм как Float
in SQL server
и C#
. Таким образом я могу преобразовать
int diff=4;
attendance.OverTime = Convert.ToDouble(diff);
здесь объявлен овертайм float type