2010-11-12 11 views
24

così sembra che se sifusione come decimali e arrotondamenti

CAST(field1 as decimal) field1 

Questo aggiungerà automaticamente l'arrotondamento.

l'originale è definito come:

campo1 Tipo: lunghezza float: 8 prec: 53

devo cast in decimale, perché devo mia strato Entity Framework per generare questo campo come decimale (invece del doppio)

c'è un modo per lanciarlo come decimale, in modo da preservare la precisione originale e non arrotondare?

Vorrei evitare di dover dichiarare la precisione nel cast, perché 1. ci sono 100 di campi coinvolti con diversa precisione, e 1. se la tabella sottostante cambia in futuro, potrebbe causare l'insorgere di bug imprevisti e 3. rende la gestione più difficile

+0

IIRC, la precisione di default per decimale è alla terza cifra decimale, se non si specifica la precisione. –

risposta

42

hai provato:

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

Questo sarebbe tornato 2.55500000. E 'questo quello che vuoi?

UPDATE:

A quanto pare è anche possibile utilizzare SQL_VARIANT_PROPERTY per trovare la precisione e la scala di un valore. Esempio:

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

rendimenti 8|7

Si può essere in grado di utilizzare questo nel vostro processo di conversione ...

+0

grazie, è possibile omettere di dichiarare la precisione? conservando ancora originale? –

+0

Hmm, non a mia conoscenza. Lasciatemi fare un piccolo tentativo ... –

+0

Beh, sembra che anche se è possibile assegnare precisione e ridimensionamento alle variabili non è possibile utilizzare tali variabili quando si dichiarano la precisione e la scala. Scusate. –

2

Prova SELECT CAST(field1 AS DECIMAL(10,2)) field1 e sostituire 10,2 con qualsiasi precisione il necessario.

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

il valore predefinito è: decimale (18,0)

+0

Grazie per aver detto che cos'è l'impostazione predefinita, ma dove l'hai trovato? –

+1

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