Le cas de Decimal
De quoi le besoin sous-jacent?
Elle découle du fait qu'en fin de compte, les ordinateurs représentent, en interne, des nombres au format binaire. Cela conduit inévitablement à des erreurs d'arrondi.
Considère ceci:
0.1 (decimal, or "base 10") = .00011001100110011... (binary, or "base 2")
Les points de suspension ci-dessus [...] signifient «infini». Si vous le regardez attentivement, il y a un motif répétitif infini (= '0011')
Donc, à un moment donné, l'ordinateur doit arrondir cette valeur. Cela conduit à des erreurs d'accumulation dérivant de l'utilisation répétée de numéros stockés de manière inexacte.
Supposons que vous souhaitiez stocker des montants financiers (qui sont des nombres qui peuvent avoir une partie fractionnaire). Tout d'abord, vous ne pouvez évidemment pas utiliser des entiers (les entiers n'ont pas de partie fractionnaire). D'un point de vue purement mathématique, la tendance naturelle serait d'utiliser a float
. Mais, dans un ordinateur, les flottants ont la partie d'un nombre qui se trouve après un point décimal - la "mantisse" - limitée. Cela conduit à des erreurs d'arrondi.
Pour surmonter cela, les ordinateurs proposent des types de données spécifiques qui limitent l'erreur d'arrondi binaire dans les ordinateurs pour les nombres décimaux. Ce sont les types de données qui doivent absolument être utilisés pour représenter des montants financiers. Ces types de données portent généralement le nom de Decimal
. C'est le cas en C #, par exemple. Ou, DECIMAL
dans la plupart des bases de données.