Devrais-je utiliser décimal, float ou double pour ce résultat mathématique simple?
-
19-08-2019 - |
Question
Je fais des calculs très simples et je sauvegarde le résultat dans une base de données MS SQL2008.
Je suis en train de calculer la moyenne des nombres, qui sont des valeurs d'octets comprises entre 1 < - > 5. Je souhaite enregistrer probablement 2 décimales seulement. Je me moque d’arrondir pour la 2e décimale (par exemple, un 1,155 == 1,5 ou 1,6 .. je ne suis pas trop en phase).
Alors .. devrais-je stocker le résultat moyen sous forme de float, décimal ou double?
Lorsque je vérifie ce que LINQ renvoie, il peut renvoyer les trois valeurs!
Enfin, quel serait le champ de type de données SQL pertinent?
acclamations!
La solution
Ce dont vous avez besoin est le type de données DECIMAL:
declare @val decimal(10,2)
select @val = 10.155
select @val
Lorsque vous entrez des valeurs, vous pouvez soit vous fier à l'arrondi intégré, soit décider explicitement de l'arrondi souhaité:
select val = round(10.155, 2, 0) -- rounded
select val = round(10.155, 2, 1) -- truncated
Décimal (10,2) signifie que dix chiffres peuvent être utilisés et que deux d’entre eux doivent être considérés comme après la virgule décimale. c’est-à-dire que le nombre le plus élevé que puisse contenir un nombre décimal (4,2) est 99,99. Si vous essayez de le régler à 100, vous obtiendrez un dépassement arithmétique.
Autres conseils
Le nombre décimal est principalement utilisé pour la devise. Bien que cela fonctionne, les gens pourraient trouver cela déroutant. Dans ce cas, je pense que float serait un meilleur choix.
Décimal - c’est le plus simple, mais aucun des mentinés ne fera le travail
Si vous souhaitez stocker les résultats en utilisant le moins d’espace possible, vous pouvez probablement procéder de la manière suivante (pseudocode):
integer = ( sum(all_values) / all_values.count().float ) * 100;
Cela vous donnera la valeur 352 pour une moyenne de 3,52 afin que vous puissiez la stocker sous forme d'entier (l'octet serait assez grand, je suppose), et il suffit de la diviser par 100 lorsque vous souhaitez l'afficher.
D'autre part, si vous ne vous souciez pas du stockage de la valeur moyenne, utiliser des valeurs flottantes est peut-être plus rapide. (Testez les deux pour voir ce qui est réellement le plus rapide sur votre système.)