web-dev-qa-db-fra.com

Existe-t-il un moyen de transformer le flottant en décimale sans arrondir et en préservant sa précision?

Il semble donc que si vous

CAST(field1 as decimal) field1

cela ajoutera automatiquement l'arrondi.

L'original est défini comme suit:

type de field1: float longueur: 8 prec: 53

Je dois le convertir en décimal, car ma couche Entity Framework doit générer ce champ sous forme décimale (au lieu de double).

Existe-t-il un moyen de le convertir en décimal, afin de préserver la précision initiale et d'éviter les arrondis?

Je voudrais éviter de devoir déclarer la précision du casting, car:

  1. il y a des centaines de champs impliqués avec une précision variable et;
  2. si la table sous-jacente change à l'avenir, des bogues imprévus pourraient survenir.
  3. rend la gestion plus difficile.
26
Sonic Soul

As-tu essayé:

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

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

PDATE:

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')

résultats 8|7

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

51
Abe Miessler

Essayez SELECT CAST(field1 AS DECIMAL(10,2)) field1 et remplacez 10,2 avec la précision dont vous avez besoin.

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

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

1
JeffO