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!

Était-ce utile?

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

Je choisirais Float sur Double et probablement Float sur Decimal :. Je choisirais Floatal, bien que tous devraient donner le même résultat.

Consultez ces deux pages pour Floats &. ; Décimales

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top