Différence entre numérique, flottant et décimal dans le serveur SQL

j'ai cherché dans Google et j'ai aussi visité décimal et numérique et SQL Server Helper pour glaner la différence entre les types de données numériques, flottant et Décimal et aussi pour trouver lequel devrait être utilisé dans quelle situation.

pour tout type de transaction financière (par exemple pour le champ salaire), lequel est préféré et pourquoi?

246
demandé sur dakab 2009-06-29 06:22:15

6 réponses

utiliser le flotteur ou réel types de données seulement si la précision fournie par décimal (jusqu'à 38 chiffres) est insuffisante

  • les types de données numériques approximatifs ne stockent pas les valeurs exactes spécifiées pour beaucoup de nombres; ils stockent une approximation extrêmement proche de la valeur.( Technet )

  • éviter d'utiliser des colonnes flottantes ou réelles dans les conditions de recherche de clauses, en particulier les opérateurs = et < > ( Technet )

donc généralement parce que la précision fournie par décimal est [10E38 ~ 38 chiffres] si votre nombre peut s'y adapter, et plus petit espace de stockage (et peut-être la vitesse) du flotteur n'est pas important et traitant des comportements anormaux et des questions de types numériques approximatifs ne sont pas acceptables, utiliser décimal généralement .

informations supplémentaires

  • numérique = décimale (5 à 17 octets) ( exacte Type de données numériques)
    • correspondra à la décimale dans .NET
    • ont tous les deux (18, 0) comme paramètres par défaut (précision,échelle) dans SQL server
    • scale = nombre maximum de décimales pouvant être stockées à la droite du point décimal.
    • veuillez noter que money (8 byte) et smallmoney (4 byte) sont également exacts et carte à décimale in .NET et ont 4 décimales ( MSDN )
    • décimal et numérique (Transact-SQL) - MSDN
  • réel (4 octets) ( Type Approximatif De Données Numériques )
  • flottant (8 octets) ( approximatif Type de données numériques)
    • aura une carte à Double .NET
  • tous exact les types numériques produisent toujours le même résultat, quel que soit le type de l'architecture du processeur est utilisé ou la magnitude des nombres
  • Le paramètre fourni pour le type de données float définit le nombre de bits qui sont utilisé pour stocker le mantissa du nombre de virgule flottante .
  • Type Approximatif De Données Numériques utilise généralement moins de stockage et ont une meilleure vitesse (jusqu'à 20x) et vous devriez également considérer quand ils ont été convertis en. net

Exact Numeric Data Types Approximate Numeric Data Types

source principale : Trousse de formation Auto-rythmée des SCTM (examen 70-433): Microsoft® SQL Server® 2008 Database Development - Chapitre 3 - tableaux , Types de données et intégrité déclarative des données Leçon 1-Choix des Types de données (Lignes directrices) - Page 93

373
répondu Iman Abidi 2017-05-23 11:33:25

lignes Directrices à partir de MSDN: Utilisation de la virgule, float, et sur des Données réelles

la précision maximale par défaut des types de données numériques et décimales est de 38. Dans Transact-SQL, numérique est fonctionnellement équivalent à la décimale type de données. utilisez le type de données décimales pour stocker des nombres avec des décimales lorsque les valeurs des données doivent être stockées exactement comme indiqué.

Le comportement de flotteur et le réel suit l' IEEE 754 spécification sur les types de données numériques approximatives. En raison de la nature approximative des types de données float et real, ne pas utiliser ces types de données quand exact numérique du comportement est nécessaire, comme dans les applications financières, en opérations d'arrondissement ou de vérification de l'égalité. Au lieu de cela, utiliser le les types de données entier, décimal, argent, ou smallmoney. Éviter d'utiliser float ou colonnes réelles dans lesquelles les conditions de recherche de la clause, en particulier le = et <> opérateurs. It est préférable de limiter le flotteur et le réel colonnes > ou < comparaison.

18
répondu kmote 2014-02-07 15:01:05

Pas une réponse complète, mais un lien utile:

"j'ai souvent effectuer des calculs à l'encontre des valeurs décimales. Dans certains cas, la coulée de valeurs décimales pour flotter ASAP, avant tout calcul, donne une meilleure précision. "

http://sqlblog.com/blogs/alexander_kuznetsov/archive/2008/12/20/for-better-precision-cast-decimals-before-calculations.aspx

11
répondu A-K 2009-06-29 03:16:46

ils diffèrent dans le type de données priorité

décimal et numérique sont les mêmes fonctionnellement mais il ya encore priorité de type de données , qui peut être crucial dans certains cas.

SELECT SQL_VARIANT_PROPERTY(CAST(1 AS NUMERIC) + CAST(1 AS DECIMAL),'basetype')

le type de données résultant est numérique parce qu'il prend type de données priorité .

liste Exhaustive des types de données par ordre de priorité:

lien de référence

9
répondu Stephan 2017-07-03 14:37:36

décimal a une précision fixe tandis que float a une précision variable.

EDIT (n'a pas lu la question entière)): Float (53) (alias real) est un nombre de points flottants de double précision (32 bits) dans SQL Server. Le flotteur régulier est un nombre flottant de précision. Double est une bonne combinaison de précision et de simplicité pour beaucoup de calculs. Vous pouvez créer un nombre de très haute précision avec décimal -- jusqu'à 136-bit -- mais vous devez également faire attention que vous définir votre précision et l'échelle correctement de sorte qu'il peut contenir tous vos calculs intermédiaires pour le nombre de chiffres.

7
répondu Brian Reiter 2009-06-29 11:48:53

Float est le type de données approximatif, ce qui signifie que toutes les valeurs dans la gamme de types de données ne peuvent pas être représentées exactement.

décimal/numérique est un type de données de précision fixe, ce qui signifie que toutes les valeurs dans la gamme de types de données peuvent être représentées exactement avec précision et échelle. Vous pouvez utiliser la virgule pour économiser de l'argent.

conversion de Décimal ou numérique à flotteur peut causer une certaine perte de la précision. Pour les types de données décimales ou numériques, SQL Server considère chaque combinaison spécifique de précision et d'échelle comme un type de données différent. Les décimales (2,2) et les décimales(2,4) sont des types de données différents. Cela signifie que 11.22 et 11.2222 sont des types différents bien que ce ne soit pas le cas pour les flotteurs. Pour FLOAT (6) 11.22 et 11.2222 sont les mêmes types de données.

vous pouvez également utiliser money type de données pour économiser de l'argent. C'est le type de données natives avec 4 chiffres précision pour de l'argent. La plupart des experts préfèrent ce type de données pour économiser de l'argent.

référence 1 2 3

1
répondu Somnath Muluk 2017-09-18 09:59:14