web-dev-qa-db-fra.com

Pour stocker des données statistiques, ai-je besoin de DECIMAL, FLOAT ou DOUBLE?

Je crée pour le plaisir, mais je veux tout de même l'aborder sérieusement, un site qui héberge divers tests. Avec ces tests, j'espère collecter des données statistiques.

Certaines des données incluront le pourcentage de complétude des tests au fur et à mesure de leur chronométrage. Je peux facilement calculer le pourcentage des tests, mais je voudrais que les vraies données soient renvoyées car je stocke les différentes valeurs concernant les tests à la fin.

La plupart des valeurs sont, dans PHP floats, ma question est donc: si je veux de vraies données statistiques, dois-je les stocker dans MYSQL en tant que FLOAT, DOUBLE ou DECIMAL. 

Je voudrais utiliser les fonctions de MYSQL, telles que AVG() et LOG10() ainsi que TRUNCATE(). Pour que MYSQL renvoie des données vraies basées sur les valeurs que j’ai insérées, que dois-je utiliser comme choix de colonne de base de données?.

Je pose la question parce que certains nombres peuvent ou non être des flottants tels que, 10, 10,89, 99,09 ou simplement 0 . Mais j'aimerais que des données statistiques vraies et valides soient renvoyées.

Puis-je compter sur les calculs en virgule flottante pour cela?

MODIFIER

Je sais que cette question est générique et je m'excuse beaucoup, mais pour les non mathématiciens comme moi, je ne suis pas non plus un expert de MYSQL, j'aimerais obtenir l'avis d'un expert dans ce domaine.

J'ai fait mes recherches mais je sens toujours que j'ai un jugement flou sur le sujet. Encore une fois, je m'excuse si ma question est hors sujet ou ne convient pas pour ce site.

57
PEPLOVE

Ce link explique très bien ce que vous recherchez. Voici ce qui est dit:

Tous ces trois types peuvent être spécifiés par les paramètres suivants (taille, d). Où taille est la taille totale de la chaîne et d représente la précision. Par exemple, pour stocker un nombre tel que 1234.567, vous définissez le type de données sur DOUBLE (7, 3), où 7 représente le nombre total de chiffres et 3, le nombre de chiffres suivis du point décimal.

FLOAT et DOUBLE, les deux représentent des nombres en virgule flottante. Un FLOTTEUR est destiné à la simple précision, tandis qu'un DOUBLE est destiné aux nombres à double précision. Une précision de 0 à 23 donne une colonne FLOAT simple précision de 4 octets. Une précision de 24 à 53 résulte en une colonne DOUBLE double précision de 8 octets. FLOAT est précis à environ 7 décimales et DOUBLE jusqu'à 14.

La déclaration et le fonctionnement de Decimal sont similaires à Double. Mais il existe une grande différence entre les valeurs à virgule flottante et les valeurs décimales (numériques). Nous utilisons le type de données DECIMAL pour stocker des valeurs numériques exactes, pour lesquelles nous ne voulons pas de précision, mais des valeurs exactes et précises. Un type décimal peut stocker un maximum de 65 chiffres, avec 30 chiffres après le point décimal.

Ainsi, pour la valeur la plus précise et la plus précise, Decimal serait la meilleure option.

72
Linger

Sauf si vous stockez des données décimales (c'est-à-dire des devises), vous devez utiliser un type de virgule flottante standard (FLOAT ou DOUBLE). DECIMAL est un type à point fixe, il peut donc déborder lors du calcul, comme SUM, et sera ridiculement inexact pour LOG10.

Il n'y a rien de "moins précis" sur les types à virgule flottante binaire, en fait, ils seront beaucoup plus précis (et plus rapides) pour vos besoins. Allez avec DOUBLE.

5
Simon Byrne

En termes simples, Float et double ne sont pas aussi précis que le nombre décimal. la décimale est recommandée pour la saisie de nombres liés à l'argent (devise et salaire) ... Un autre point à souligner est le suivant: NE comparez PAS le nombre flottant avec "=", "<>", car les nombres flottants ne sont pas précis. 

5
waterinusa

Décimal : Types à point fixe (Valeur exacte). Utilisez-le lorsque vous vous souciez de la précision exacte, comme de l'argent. 

Exemple: salary DECIMAL(8,2), 8 est le nombre total de chiffres, 2 le nombre de décimales. salary sera dans la plage de -999999.99 à 999999.99


Float, Double : Types à virgule flottante (Valeur approximative). Float utilise 4 octets pour représenter la valeur, Double utilise 8 octets pour représenter la valeur.

Exemple: percentage FLOAT(5,2), identique au type décimal, 5 représente le nombre total de chiffres et 2, le nombre de décimales. percentage stockera les valeurs entre -999.99 et 999.99.

Notez qu'ils sont approximatifs valeur, dans ce cas:

  • Une valeur telle que 1 / 3.0 = 0.3333333... sera stockée sous la forme 0.33 (2 décimales)
  • Une valeur telle que 33.009 sera stockée sous la forme 33.01 (arrondie à 2 décimales)
3
Timeless

Linger: Sur le site Web que vous mentionnez et citez, l'OMI a des informations imprécises qui m'ont troublé. J'ai lu dans la documentation que, lorsque vous déclarez un nombre à virgule flottant ou un double, le point décimal n'est PAS inclus dans le nombre. Donc, ce n'est pas le nombre de caractères dans une chaîne, mais tous les chiffres utilisés.

Comparez les documents: "DOUBLE PRECISION (M, D) .. Ici," (M, D) "signifie que les valeurs peuvent être stockées avec un maximum de M chiffres, D pouvant être après la virgule Par exemple, une colonne définie comme FLOAT (7,4) ressemblera à -999.9999 lorsqu'elle sera affichée " http://dev.mysql.com/doc/refman/5.1/fr/floating-point-types .html

La nomenclature est également trompeuse - selon la documentation: M est la «précision» et D est la «balance», alors que le site Web prend la «balance» pour «précision».

Je pensais que cela serait utile dans le cas où sb comme moi essayait d'obtenir une image. Corrigez-moi si je me trompe, espérons que je n'ai pas lu certains documents obsolètes :)

1
Joey

Float et Double sont des types de données à virgule flottante, ce qui signifie que les nombres qu'ils stockent ne peuvent être précis que jusqu'à un certain nombre de chiffres. Par exemple, pour une table avec une colonne de type float, si vous stockez 7.6543219, il sera stocké sous la forme 7.65432. De même, le type de données Double se rapproche des valeurs mais il a plus de précision que Float.

Lorsque vous créez une table avec une colonne de type de données Decimal, vous spécifiez le nombre total de chiffres et le nombre de chiffres après le nombre décimal à stocker. Si le nombre que vous stockez est compris dans la plage que vous avez spécifiée, il sera stocké exactement.

Si vous souhaitez stocker des valeurs exactes, Decimal est le chemin à suivre, il s'agit de ce que l'on appelle un type de données fixe.

0
Daksh