Реальное поле SQL-сервера конвертирует мои числа в обычный формат - PullRequest
0 голосов
/ 09 июля 2011

Я храню некоторые числа в поле «реального» типа.

Я вставляю / считываю значения из него из моего приложения на c #, используя ADO.net Когда я запрашиваю свои данные в Server Management Studio, я вижу, что они преобразуют мои числа в обычный научный формат, например: 2,211221E + 07. Я ничего не установил для этого, все по умолчанию.

Как мне избежать этого поведения?

MS SQL Server 2008 Express / .Net 4 / VS2010

1 Ответ

4 голосов
/ 09 июля 2011

Он не конвертирует ваши реалы (плавающие точки IEEE) в научный формат: вот так отображает их в SSMS. Вот как ADO.Net отображает типы данных между SQL Server и миром .Net: http://msdn.microsoft.com/en-us/library/cc716729.aspx

Для типов с плавающей запятой SQL Server реализует тип данных ISO float( n ), где n - размер мантиссы в битах (1-53 включительно). ). real является синонимом float(24); float является синонимом float(53).

Скорее, чем вы могли бы ожидать, столбцы с плавающей запятой с мантиссой размером 1-24 бита отображаются в / из System.Single; в то время как те, у кого мантисса размером более 24 бит, отображаются на System.Double.

Типы данных

Sql Server money и smallmoney действительно мало связаны с деньгами. Это просто десятичные числа с фиксированной точностью, с точностью до 4 десятичных знаков (1/10000 единицы). Ado.Net сопоставляет money и smallmoney с System.Decimal и сопоставляет System.Decimal с money (нет сопоставления с smallmoney). Это преобразование страдает от некоторого несоответствия импеданса, однако System.Decimal является десятичным форматом с плавающей запятой. Преобразование в / из типа данных money SQL Server может привести к

  • Потеря точности. Если значение System.Decimal имеет более 4 цифр справа от десятичной точки, дополнительные цифры теряются.
  • Повышение точности. Если значение `System.Decimal имеет меньше 4 цифр справа от десятичной запятой, при преобразовании в деньги оно приобретает точность в виде дополнительных цифр (триал нули) справа от десятичной точки. Эта дополнительная точность сохраняется при чтении с SQL Server.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...