2010-11-15 3 views
9

У меня есть представление, которое должно возвращать тип decimal для столбцов, хранящихся как float.Преобразование float в десятичный в SQL Server 2008

я могу бросить каждый столбец в десятичную следующим образом:

, CAST(Field1 as decimal) Field1 

Проблема с этим подходом является то, что десятичные по умолчанию 18,0, который автоматически округляется столбцы с плавающей точкой 0. Я хотел бы сохранить точность до 12 знаков после запятой.

Однако, если я делаю это:

, CAST(Field1 as decimal(12,12)) Field1 

Я получаю сообщение об ошибке выполнения:

"Arithmetic overflow error converting float to data type numeric" 

колонка поплавка определяется как длина: 8 Точность: 53 в таблице. Я ничего не могу изменить о таблице.

Каков правильный способ отличить десятичную оценку от потери десятичной точности?

+1

Мое предложение состоит в том, что вы прекращаете хранить данные как float, поскольку это неточный тип данных, и вы получите ошибки округления, если вы выполняете вычисления на нем. – HLGEM

ответ

21

12, 12 означает отсутствие цифр перед разделителем в десятичной форме: 12 цифр всего, 12 из них после периода.

Используйте более подходящий диапазон, скажем:

DECLARE @var FLOAT = 100 
SELECT CAST(@var as decimal(20,12)) 

, который дает вам 8 цифр перед разделителем, или настроить его по мере необходимости.

+0

Огромное спасибо, знаете ли вы, что есть способ форматировать его, чтобы он возвращал десятичные знаки, если есть значение? если я выберу из таблицы, он не покажет конечные 0, но после отливки 12 нулей ALWAYS показывают .. –

+0

@Sonic: так что вам нужно: вернуть 'DECIMAL' или формат? Форматирование оставит вас с помощью 'VARCHAR'. – Quassnoi

Смежные вопросы