2010-11-12 11 views
24

il semble donc que si vouscoulée en décimal et arrondi

CAST(field1 as decimal) field1 

cela ajoutera automatiquement arrondi.

l'original est défini comme:

Type field1: longueur du flotteur: 8 prec: 53

je dois jeter en décimal, parce que je besoin de ma couche Entity Framework pour générer ce champ comme décimal (au lieu de double)

Y at-il un moyen de le convertir en décimal, de sorte qu'il préserve la précision d'origine, et ne tourne pas? Je voudrais éviter d'avoir à déclarer la précision dans la distribution, car 1. il y a des centaines de champs impliqués avec une précision variable, et 1. si la table sous-jacente change à l'avenir, cela pourrait causer l'apparition de bogues imprévus et 3. rend la gestion plus difficile

+0

IIRC, la précision par défaut pour DECIMAL est à trois décimales si vous ne spécifiez pas la précision. –

Répondre

42

Avez-vous essayé:

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

Cela reviendrait 2.55500000. Est-ce que c'est ce que tu veux?

MISE À JOUR:

Apparemment, vous pouvez également utiliser SQL_VARIANT_PROPERTY pour trouver la précision et l'échelle d'une valeur. Exemple:

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

retours 8|7

Vous pourrez peut-être utiliser dans votre processus de conversion ...

+0

merci, est-il possible d'omettre de déclarer la précision? tout en préservant l'original? –

+0

Hmm, pas à ma connaissance. Laissez-moi faire un petit tour ... –

+0

Eh bien, il semble que même si vous pouvez affecter la précision et l'échelle aux variables, vous ne pouvez pas utiliser ces variables lors de la déclaration de la précision et de l'échelle. Pardon. –

2

Essayez SELECT CAST(field1 AS DECIMAL(10,2)) field1 et remplacer 10,2 avec tout ce dont vous avez besoin de précision.

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

La valeur par défaut est: décimal (18,0)

+0

Merci d'avoir indiqué la valeur par défaut, mais où avez-vous trouvé cela? –

+1

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