Quelles sont les différences entre numeric
, float
et les decimal
types de données et qui devraient être utilisés dans quelles situations?
Pour tout type de transaction financière (par exemple pour le domaine salarial), laquelle est préférée et pourquoi?
sql
sql-server
types
priyanka.sarkar
la source
la source
Réponses:
Les types de données numériques approximatifs ne stockent pas les valeurs exactes spécifiées pour de nombreux nombres; ils stockent une approximation extrêmement proche de la valeur. ( Technet )
Évitez d'utiliser des colonnes flottantes ou réelles dans les conditions de recherche de la clause WHERE, en particulier les opérateurs = et <> ( Technet )
donc généralement parce que la précision fournie par la décimale est de [10E38 ~ 38 chiffres] si votre nombre peut y entrer, et un espace de stockage plus petit (et peut-être la vitesse) de Float n'est pas important et traiter les comportements anormaux et les problèmes de types numériques approximatifs ne sont pas acceptable, utilisez Decimal en général .
informations plus utiles
source principale : Kit de formation auto-rythmé SCTM (examen 70-433): Développement de base de données Microsoft® SQL Server® 2008 - Chapitre 3 - Tableaux, types de données et intégrité déclarative des données Leçon 1 - Choix des types de données (directives) - Page 93
la source
use the float or real data types only if the precision provided by decimal is insufficient
- Je pensais que réel est MOINS précis que décimal, alors comment se fait-il que vous écriviez pour utiliser réel si la décimale est insuffisante?decimal
sera parfait . C'est une précision de 20. Si vous avez besoin de stocker des valeurs entre, disons, 1e20 et 1e-20, eh bien,decimal
vous ne pouvez pas le faire. C'est 40 chiffres de précision. Vous ne pouvez jamais stocker 1e20 et 1e-20 dans le mêmedecimal
champ. Au lieu de cela, vous pouvez utiliserfloat
, qui stocke tout en interne comme un journal de base 2. Cela permet une gamme complète de précision dans un champ avec l'inconvénient que seuls les 8 premiers chiffres seront précis.float
..." - dit qui? Est-ce une citation ou votre opinion?Instructions de MSDN: utilisation de données décimales, flottantes et réelles
la source
Scale
colonne.numeric
car il ne stockera jamais avec plus de précision que vous ne l'auriez demandé: voir stackoverflow.com/a/759606/626804Pas une réponse complète, mais un lien utile:
"Je fais fréquemment des calculs par rapport aux valeurs décimales. Dans certains cas, le fait de lancer des valeurs décimales pour qu'elles flottent dès que possible, 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
la source
decimal
etfloat
sont différentes . Decimal préserve autant que possible le sous-dépassement en augmentant la précision ou l'échelle. Cependant, une fois que vous avez atteint la limite des chiffres significatifs en décimales, les sous-flux sont silencieux (et la précision est perdue). Float a une gamme d'échelle plus large possible, et ce sont les limitations d'échelle qui sont en fait la cause du sous-dépassement. Ainsi, le flotteur peut avoir une meilleure échelle. Néanmoins, il s'agit toujours d'un type inexact .Ils diffèrent par la priorité des types de données
Décimal et Numérique sont les mêmes fonctionnellement mais il y a toujours une priorité de type de données , qui peut être cruciale dans certains cas.
Le type de données résultant est numérique car il a priorité sur le type de données .
Liste exhaustive des types de données par ordre de priorité:
Lien de référence
la source
Decimal a une précision fixe tandis que float a une précision variable.
EDIT (échec de lecture de la question entière): Float (53) (aka real) est un nombre à virgule flottante double précision (32 bits) dans SQL Server. Regular Float est un nombre à virgule flottante simple précision. Double est une bonne combinaison de précision et de simplicité pour de nombreux calculs. Vous pouvez créer un nombre très précis avec des décimales - jusqu'à 136 bits - mais vous devez également faire attention à bien définir votre précision et votre échelle afin qu'il puisse contenir tous vos calculs intermédiaires au nombre de chiffres nécessaire.
la source
Float est un type de données à nombre approximatif, ce qui signifie que toutes les valeurs de la plage de types de données ne peuvent pas être représentées exactement.
Decimal / Numeric est un type de données à précision fixe, ce qui signifie que toutes les valeurs de la plage de types de données peuvent être représentées exactement avec précision et échelle. Vous pouvez utiliser décimal pour économiser de l'argent.
La conversion de décimal ou numérique en flottant peut entraîner une perte de précision. Pour les types de données décimaux 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. DECIMAL (2,2) et DECIMAL (2,4) sont des types de données différents. Cela signifie que 11.22 et 11.2222 sont de types différents bien que ce ne soit pas le cas pour float. Pour FLOAT (6) 11.22 et 11.2222 sont les mêmes types de données.
Vous pouvez également utiliser le type de données money pour économiser de l'argent. Il s'agit d'un type de données natif avec une précision de 4 chiffres 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
la source
Le cas de Decimal
De quoi le besoin sous-jacent?
Elle découle du fait qu'en fin de compte, les ordinateurs représentent, en interne, des nombres au format binaire. Cela conduit inévitablement à des erreurs d'arrondi.
Considère ceci:
Les points de suspension ci-dessus [...] signifient «infini». Si vous le regardez attentivement, il y a un motif répétitif infini (= '0011')
Donc, à un moment donné, l'ordinateur doit arrondir cette valeur. Cela conduit à des erreurs d'accumulation dérivant de l'utilisation répétée de numéros stockés de manière inexacte.
Supposons que vous souhaitiez stocker des montants financiers (qui sont des nombres qui peuvent avoir une partie fractionnaire). Tout d'abord, vous ne pouvez évidemment pas utiliser des entiers (les entiers n'ont pas de partie fractionnaire). D'un point de vue purement mathématique, la tendance naturelle serait d'utiliser a
float
. Mais, dans un ordinateur, les flottants ont la partie d'un nombre qui se trouve après un point décimal - la "mantisse" - limitée. Cela conduit à des erreurs d'arrondi.Pour surmonter cela, les ordinateurs proposent des types de données spécifiques qui limitent l'erreur d'arrondi binaire dans les ordinateurs pour les nombres décimaux. Ce sont les types de données qui doivent absolument être utilisés pour représenter des montants financiers. Ces types de données portent généralement le nom de
Decimal
. C'est le cas en C #, par exemple. Ou,DECIMAL
dans la plupart des bases de données.la source
Bien que la question n'inclue pas le type de données MONEY, certaines personnes rencontrant ce fil peuvent être tentées d'utiliser le type de données MONEY pour les calculs financiers.
Méfiez-vous du type de données MONEY, sa précision est limitée.
Il y a beaucoup de bonnes informations à ce sujet dans les réponses à cette question Stackoverflow:
Devriez-vous choisir les types de données MONEY ou DECIMAL (x, y) dans SQL Server?
la source