Quel est le meilleur type de données pour conserver des valeurs en pourcentage comprises entre 0,00% et 100,00%?
sql-server
types
sqldatatypes
Utilisateur
la source
la source
Réponses:
En supposant deux décimales sur vos pourcentages, le type de données que vous utilisez dépend de la façon dont vous prévoyez de stocker vos pourcentages. Si vous envisagez de stocker leur équivalent fractionnaire (par exemple, 100,00% stocké en tant que 1,0000), je stockerais les données dans un
decimal(5,4)
type de données avec uneCHECK
contrainte qui garantit que les valeurs ne dépassent jamais 1,0000 (en supposant que c'est le plafond) et ne descendent jamais en dessous de 0 (en supposant que c'est le sol). Si vous allez stocker leur valeur nominale (par exemple, 100,00% est stocké sous la forme 100,00), vous devez utiliserdecimal(5,2)
avec uneCHECK
contrainte appropriée . Combiné avec un bon nom de colonne, il indique clairement aux autres développeurs quelles sont les données et comment les données sont stockées dans la colonne.la source
decimal(5,2)
là où 2 indique le nombre de chiffres après le séparateur décimal?decimal(5,2)
est ce qui doit être capturé avec une contrainte de vérification.decimal(5,4)
et a été changédecimal(5,2)
après le commentaire ci-dessus ... Je pense que cedecimal(5,4)
serait la meilleure définition - c'est-à-dire que vous voulez stocker 0 à 1 avec 2 décimales, pas 0 à 100. La raison étant un pourcentage est hors de 100; donc 100% est 100/100, ce qui équivaut à 1. Le faire de cette façon a plus de sens dans la plupart des cas (par exemple100% * 100% = 100%
, non10000%
;1 * 1 = 1
).100.00
), vous en avez besoindecimal(5,2)
. Si les valeurs doivent être stockées sous forme de fractions (par exemple1.0000
), vous en avez besoindecimal(5,4)
. Mettra à jour le message.decimal
.columnName decimal(precision, scale)
. La précision indique le nombre total de chiffres pouvant être contenus dans le nombre, l'échelle indique le nombre de chiffres après la décimale, de mêmedecimal(3,2)
qu'un nombre qui peut être représenté comme#.##
;decimal(5,3)
serait##.###
.decimal
etnumeric
sont essentiellement la même chose. Cependant, ildecimal
est conforme à la norme ANSI, alors utilisez-le toujours sauf indication contraire (par exemple, selon les normes de codage de votre entreprise).Exemples de scénarios
decimal(5,4)
.decimal(3,2)
.Exemple:
Lectures complémentaires:
0 to 1
vs0 to 100
: C #: Stockage des pourcentages, 50 ou 0,50?la source
Je suis d'accord avec Thomas et je choisirais la solution DECIMAL (5,4) au moins pour les applications WPF.
Jetez un œil à la chaîne de format numérique MSDN pour savoir pourquoi: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
Ensuite, vous pourrez utiliser ceci dans votre code XAML:
la source
Si 2 décimales est votre niveau de précision, alors un "smallint" traitera ceci dans le plus petit espace (2 octets). Vous stockez le pourcentage multiplié par 100.
EDIT: Le type décimal est probablement une meilleure correspondance. Ensuite, vous n'avez pas besoin de mettre à l'échelle manuellement. Il faut 5 octets par valeur.
la source
Utilisez numérique (n, n) où n a une résolution suffisante pour arrondir à 1,00. Par exemple:
la source