Полная точность вывода типов с плавающей точкой в ​​SQL Server Management Studio - PullRequest
8 голосов
/ 12 ноября 2011

У меня есть значение 1555.4899999999998, сохраненное в столбце float с точностью по умолчанию (53). Когда я делаю простой select, SSMS округляет вывод, а не печатает его со всей доступной точностью. Это вызвало у меня некоторые ошибки, поскольку напечатанное значение не работает как литерал float, чтобы соответствовать фактическому сохраненному значению.

Например (обратите внимание, что оба эти числа имеют точное представление по умолчанию float),

declare @f1 float
declare @f2 float
set @f1 = 1555.49
set @f2 = 1555.4899999999998
select @f1, @f2
select STR(@f1,30,15), STR(@f2,30,15)

Выходы:

1555.49 1555.49
1555.490000000000000    1555.489999999999800

В Query Analyzer эти первые select выводят:

1555.49 1555.4899999999998

Именно такое поведение я хочу получить от Management Studio. Есть ли способ предотвратить округление SSMS при отображении результатов?

Ответы [ 3 ]

7 голосов
/ 12 ноября 2011

номер

SQL Server Management Studio округляет значения с плавающей запятой для целей отображения; есть предложение по изменению этого поведения , но оно закрыто "как разработано".

Однако SQLCMD, osql и Query Analyzer этого не делают.

SQLCMD -E -S server -Q"SELECT CONVERT(FLOAT, 1555.4899999999998)"
0 голосов
/ 08 мая 2015

Изменить на мой оригинальный пост.Я пытался решить немного другую проблему, когда наткнулся на эту страницу.Я просто хотел, чтобы тип с плавающей точкой возвращал «обычное» число, а не научную запись.

Первоначально предлагал два преобразования.Завелась с этим в потом конец.7 ниже можно изменить, чтобы показывать столько десятичных разрядов, сколько вы хотите.Замена и обрезка избавляют от начальных и конечных нулей.

REPLACE (RTRIM (LTRIM (REPLACE (STR (x, 20, 7), '0', ''))), '', '0')

0 голосов
/ 12 ноября 2011

Есть ли причина, по которой вы предпочитаете использовать тип с плавающей запятой, а не десятичный?Поплавки хранятся в виде дробей, что часто делает их неточными при выполнении операций с ними.Это нормально, когда у вас есть графическое приложение, в котором неточность гораздо менее значительна, чем размер пикселя, но это огромная проблема в чем-то вроде бухгалтерского приложения, где вы имеете дело с деньгами.

Я бырискну сказать, что точность десятичной дроби более важна для большинства приложений, чем любое преимущество в скорости или размере, которое они получили бы от использования поплавка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...