Проблема с SQL-запросом - PullRequest
       6

Проблема с SQL-запросом

2 голосов
/ 29 сентября 2010

У меня два SQL-запроса, оба возвращают

выбор раунда (конвертировать (float, '24367.723'), 2)

Результат: 24367,72

Второе:

выберите конвертировать (varchar (20), округлить (конвертировать (float, '24367.723'), 2))

Результат: 24367,7

Почему при возврате второго запроса исключается последняя цифра после преобразования в varchar

Заранее спасибо

Ответы [ 3 ]

3 голосов
/ 29 сентября 2010

Не указав параметр стиля для функции преобразования, вы получите стиль по умолчанию (0).

т.е. это эквивалентно

select convert(varchar(20),round(convert(float,'24367.723'),2), 0)      

Стиль по умолчанию для преобразования из числа с плавающей точкой в ​​varchar отображает максимум 6 цифр.

0 голосов
/ 29 сентября 2010

Не используйте поплавки, используйте точные цифры. Как то так

   convert(varchar(20), convert(numeric(20,2), '24367.72'))
0 голосов
/ 29 сентября 2010

При работе с плавающей точкой функция STR () обычно дает лучшие результаты в соответствии с MSDN, поскольку у вас больше контроля.

* 1003 Е.Г. *

select str(convert(float,'24367.723'),8, 2)
...