Il y a deux concepts importants à comprendre dans cette situation.
- Littéraux
- de conversion Implicit
Essentiellement ce que vous demandez est de savoir si une valeur littérale peut être convertie implicitement entre 2 types. Le compilateur va le faire pour vous dans certains cas où il n'y aurait pas de perte de précision. Prenez ceci par exemple:
long n = 1000; // Assign an Int32 literal to an Int64.
Ceci est possible parce qu'un long
(Int64) contient une plus grande plage de valeurs par rapport à un int
(Int32). Pour votre exemple spécifique, il est possible de perdre la précision. Voici les plages radicalement différentes pour decimal
et double
.
Decimal: ±1.0 × 10−28 to ±7.9 × 1028
Double: ±5.0 × 10−324 to ±1.7 × 10308
Avec la connaissance, il devient clair pourquoi une conversion implicite est une mauvaise idée. Voici une liste des conversions implicites que le compilateur C# supporte actuellement. Je vous recommande fortement de faire un peu de lecture sur le sujet.
Implicit Numeric Conversions Table
@slaks: Quelle est la bonne façon de initiliazing une décimale? –
Comme vous l'avez fait, avec un suffixe 'M'. – SLaks
@jenny, juste pour devancer la question suivante, 'double d = 1/2' est égal à 0. Pensez à la raison pour laquelle dans le contexte de cette question et réponse. –