2010-11-12 13 views
24

więc wydaje się, że jeśliodlew jak przecinku i zaokrąglenia

CAST(field1 as decimal) field1 

zostanie automatycznie dodać zaokrąglenia.

oryginał jest zdefiniowany jako:

pole1 typ: długość pływaka: 8 prec: 53

muszę oddać go na dziesiętne, ponieważ muszę mój warstwę Entity Framework do generowania tej dziedzinie, a po przecinku (zamiast podwójnego)

Czy istnieje sposób na obsadzenie go dziesiętnie, tak aby zachował oryginalną precyzję i nie zaokrąglał?

Chciałbym uniknąć konieczności zadeklarowania precyzji w obsadzie, ponieważ 1. jest 100 pól zaangażowanych z różną precyzją, i 1. jeśli tabela podstawowa ulegnie zmianie w przyszłości, może to spowodować pojawienie się nieprzewidzianych błędów oraz 3. sprawia, że ​​zarządzanie trudniejsze

+0

IIRC, domyślna precyzja dziesiętna jest do trzech miejsc po przecinku, jeśli nie określić precyzję. –

Odpowiedz

42

Czy próbowałeś:

SELECT Cast(2.555 as decimal(53,8)) 

byłby to powrót 2.55500000. Czy tego chcesz?

UPDATE:

Podobno można również użyć SQL_VARIANT_PROPERTY znaleźć precyzji i skali wartości. Przykład:

SELECT SQL_VARIANT_PROPERTY(Cast(2.555 as decimal(8,7)),'Precision'), 
SQL_VARIANT_PROPERTY(Cast(2.555 as decimal(8,7)),'Scale') 

powraca 8|7

Możesz być w stanie wykorzystać to w procesie konwersji ...

+0

dzięki, czy można pominąć deklarowanie precyzji? zachowując oryginał? –

+0

Hmm, nie według mojej wiedzy. Pozwól mi trochę pogadać ... –

+0

Cóż, wygląda na to, że możesz przypisać precyzję i skalę do zmiennych, których nie możesz użyć podczas deklarowania precyzji i skali. Przepraszam. –

2

Try SELECT CAST(field1 AS DECIMAL(10,2)) field1 i zastąpić 10,2 ze cokolwiek precyzja trzeba.

1
cast (field1 as decimal(53,8) 
) field 1 

Wartość domyślna to: decimal (18,0)

+0

Dzięki za opowiadanie tego, co domyślne, ale gdzie to znalazłeś? –

+1

@LonnieBest - https://msdn.microsoft.com/en-us/library/ms187746.aspx – JeffO

Powiązane problemy