Différence entre decimal, float et double dans .NET ?

Différence entre decimal, float et double dans .NET ?


Source : Stack Overflow [.net].)

float (l’alias C# pour System.Single) et double (l’alias C# pour System.Double) sont des types à virgule flottante binaire. float est sur 32 bits ; double est sur 64 bits. Autrement dit, ils représentent un nombre comme ceci :

10001.10010110011

Le nombre binaire et la position de la virgule binaire sont tous deux encodés dans la valeur.

decimal (l’alias C# pour System.Decimal) est un type à virgule flottante décimale. Autrement dit, il représente un nombre comme ceci :

12345.65789

Là encore, le nombre et la position de la virgule décimale sont tous deux encodés dans la valeur – c’est ce qui fait de decimal un type à virgule flottante et non un type à virgule fixe.

Le point important à noter est que les humains ont l’habitude de représenter les nombres non entiers sous forme décimale et s’attendent à des résultats exacts en représentation décimale ; tous les nombres décimaux ne sont pas exactement représentables en virgule flottante binaire – 0.1, par exemple – donc si vous utilisez une valeur en virgule flottante binaire, vous obtiendrez en réalité une approximation de 0.1. Vous obtiendrez également des approximations en utilisant la virgule flottante décimale – le résultat de la division de 1 par 3 ne peut pas être représenté exactement, par exemple.

Quant à savoir quand utiliser quoi :

Pour les valeurs qui sont « naturellement des décimaux exacts », il est bon d’utiliser decimal. Cela convient généralement pour tout concept inventé par l’homme : les valeurs financières sont l’exemple le plus évident, mais il y en a d’autres aussi. Pensez par exemple aux notes attribuées aux plongeurs ou aux patineurs artistiques.

Pour les valeurs qui sont davantage des artefacts de la nature et qui ne peuvent de toute façon pas être mesurées exactement, float/double sont plus appropriés. Par exemple, les données scientifiques seraient habituellement représentées sous cette forme. Ici, les valeurs d’origine ne seront pas « décimalement exactes » au départ, il n’est donc pas important que les résultats attendus maintiennent la « précision décimale ». Les types à virgule flottante binaire sont beaucoup plus rapides à traiter que les décimaux

(Réponse tronquée)