Что представляет двойное в SQL-сервере?

Самое изящное решение, которое я нашел для проблем как это, является чем-то вроде этого (в псевдокоде)

separator = ""
foreach(item in stringCollection)
{
    concatenatedString += separator + item
    separator = ","
}

, Вы просто выполняете цикл и только после того, как второй раз вокруг разделителя установлен. Так в первый раз это не будет добавлено. Это не столь чисто, как я хотел бы, чтобы он был так, я все еще добавлю комментарии, но это лучше, чем если оператор или добавление первого или последнего объекта вне цикла.

320
задан sll 13 August 2011 в 02:09
поделиться

7 ответов

Разве в классах System.Data.Sql уже нет сопоставлений?

См .: C #: Эквиваленты типов данных SQL Server в .NET Framework .

А теперь сделайте мою поплавком ...

1
ответ дан 27 June 2019 в 04:58
поделиться
float

Или, если вы хотите придерживаться старой школы:

real

Вы также можете использовать float (53), но это означает то же самое, что и float.

("real" эквивалентно для float (24), а не float / float (53).)

Тип decimal (x, y) SQL Server предназначен для случаев, когда вам нужны точные десятичные числа, а не с плавающей точкой (которые могут быть приблизительными). Это контрастирует с "десятичным" типом данных C #, который больше похож на 128-битное число с плавающей запятой.

MSSQL float не имеет точно такой же точности, как 64-битный тип double в .NET (небольшая разница в мантиссе IIRC), но он достаточно близок для большинства применений.

Чтобы сделать ситуацию более запутанной, "float" в C # - это только 32-битный, Все, что вам нужно, это 5 знаков после десятичной точки, чтобы представить широту и долготу с точностью примерно до одного метра, и вам нужно всего до трех цифр перед десятичной точкой для градусов. Float (24) или decimal (8,5) лучше всего соответствуют вашим потребностям в MSSQL, а использование float в C # достаточно хорошо, вам не нужно double. Фактически, ваши пользователи, вероятно, будут благодарить вас за округление до 5 знаков после запятой, вместо того, чтобы использовать кучу незначительных цифр.

372
ответ дан 23 November 2019 в 00:59
поделиться

Похоже, вы можете выбирать и выбирать. Если вы выберете float, вы можете потерять 11 знаков точности. Если это приемлемо, сделайте это - очевидно, разработчики Linq посчитали это хорошим компромиссом.

Однако, если вашему приложению нужны эти дополнительные цифры, используйте десятичные числа. В любом случае десятичная дробь (реализованная правильно) намного точнее, чем число с плавающей запятой - никакого беспорядочного перевода с основания 10 на основание 2 и обратно.

3
ответ дан 23 November 2019 в 00:59
поделиться

float в SQL Server на самом деле имеет [edit: почти] точность «double» (в смысле C #).

float является синонимом для поплавок (53) . 53 - это бит мантиссы.

.NET double использует 54 бита для мантиссы.

8
ответ дан 23 November 2019 в 00:59
поделиться

float является ближайшим эквивалентом.

SqlDbType Enumeration

Для широты и долготы, как упоминалось в OP.

Метр составляет 1/40 000 000 широты, 1 секунда - около 30 метров. Float / double дают 15 значащих цифр. С помощью некоторых быстрых и изворотливых вычислений в уме ... ошибки округления / аппроксимации будут примерно равны длине этой точки заполнения -> "."

15
ответ дан 23 November 2019 в 00:59
поделиться

Для SQL-сервера:

Десятичный тип - 128-битное число со знаком Float - это 64-битное число со знаком.

Настоящий ответ - Float , я ошибся насчет десятичного числа.

Причина в том, что если вы используете десятичное число, вы никогда не заполните 64 бита десятичного типа .

Хотя decimal не выдаст ошибку, если вы попытаетесь использовать тип int.

Вот хорошая справочная таблица типов.

5
ответ дан 23 November 2019 в 00:59
поделиться

Вы должны сопоставить его с FLOAT (53) - это то, что делает LINQ to SQL .

10
ответ дан 23 November 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: