web-dev-qa-db-fra.com

Quand utiliser float vs decimal

Je construis cette API et la base de données stockera des valeurs qui représentent l'un des éléments suivants:

  • pourcentage
  • moyenne
  • taux

Honnêtement, je n'ai aucune idée de comment représenter quelque chose que la plage est comprise entre 0 et 100% en chiffres. Devrait-ce être

  • 0,00 - 1,00
  • 0,00 - 100,00
  • toute autre alternative que je ne connais pas

Y a-t-il un choix clair pour cela? Une manière globale de représenter sur les bases de données quelque chose qui va de 0 à 100% pour cent? Pour aller plus loin, quel est le type correct, flottant ou décimal?

Je vous remercie.

15
Amanda Ferrari
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G

*********************************************************************

@a := (a/3): 33.333333333
@b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100

La décimale a fait exactement ce qui est censé faire sur ces cas, elle a tronqué le reste, perdant ainsi la partie 1/3.

Donc pour les sommes, la décimale est meilleure, mais pour les divisions, le flottant est meilleur, jusqu'à un certain point, bien sûr. Je veux dire, l'utilisation de DECIMAL ne vous donnera en aucun cas une "arithmétique infaillible".

J'espère que cela aidera.

0
vishpatel73

Dans tsql: Float, 0.0 stocke comme 0 et il n'est pas nécessaire de définir après le chiffre décimal, par exemple vous n'avez pas besoin d'écrire Float (4,2). Décimal, 0,0 stocker comme 0,0 et il a la possibilité de définir comme décimal (4,2), je suggérerais 0,00-1,00, en faisant cela, vous pouvez calculer la valeur de ce pourcentage sans multiplier par 100, et si vous signalez, définissez le type de données de cette colonne en pourcentage comme MS Excel et une autre vue de plate-forme comme 0.5 -> 50%.

0
Arsalan Khan

Decimal: Dans le cas des applications financières, il est préférable d'utiliser les types Decimal car cela vous donne un haut niveau de précision et évite facilement les erreurs d'arrondi

Double: Les types doubles sont probablement le type de données le plus couramment utilisé pour les valeurs réelles, à l'exception de la gestion de l'argent.

Float: Il est principalement utilisé dans les bibliothèques graphiques car des demandes très élevées de puissances de traitement, ont également utilisé des situations qui peuvent supporter des erreurs d'arrondi.

Référence: http://net-informations.com/q/faq/float.html

0
Prabodha

La différence entre float et decimal est la précision. Decimal peut représenter avec précision à 100% n'importe quel nombre dans la précision du format décimal, tandis que Float ne peut pas représenter avec précision tous les nombres.

Utilisez Decimal pour par exemple la valeur financière et le flottant d'utilisation, par exemple valeur liée graphique

0

Je recommande d'utiliser decimal(5,2) si vous allez le stocker de la même manière que vous l'afficherez puisque decimal sert à préserver la précision exacte. (Voir https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html )

Étant donné que les valeurs à virgule flottante sont approximatives et ne sont pas stockées en tant que valeurs exactes, les tentatives de les traiter comme exactes dans les comparaisons peuvent entraîner des problèmes. Ils sont également soumis à des dépendances de plate-forme ou d'implémentation.

( https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html )

Une valeur à virgule flottante telle qu'elle est écrite dans une instruction SQL peut ne pas être la même que la valeur représentée en interne.

Pour les colonnes DECIMAL, MySQL effectue des opérations avec une précision de 65 chiffres décimaux, ce qui devrait résoudre les problèmes d'inexactitude les plus courants.

https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html

0
jhoanna