Afin de travailler avec des types de données décimales, je dois le faire avec l'initialisation des variables :
decimal aValue = 50.0M;
Que signifie la partie M ?
Afin de travailler avec des types de données décimales, je dois le faire avec l'initialisation des variables :
decimal aValue = 50.0M;
Que signifie la partie M ?
Cela signifie que c'est un littéral décimal, comme d'autres l'ont dit. Cependant, les origines ne sont probablement pas celles suggérées ailleurs dans cette réponse. De la C# Annotated Standard (la version ECMA, pas la version MS) :
El
decimal
Le suffixe est M/m puisque D/d était déjà pris pardouble
. Bien qu'il ait été suggéré que M représente l'argent, Peter Golde rappelle que M a été choisi simplement comme la prochaine meilleure lettre dansdecimal
.
Une annotation similaire mentionne que les premières versions de C# comprenaient "Y" et "S" pour byte
y short
respectivement. Ils ont été abandonnés au motif qu'ils n'étaient pas souvent utiles.
"e" serait problématique dans la mesure où il est déjà utilisé dans les littéraux. Par exemple, "2e4m" est un littéral valide (décimal 20000). Même s'il n'y avait pas d'ambiguïté (et cela pourrait bien être le cas, bien que "1e" donne lieu à un curieux message d'erreur du compilateur suggérant qu'il est hors de la plage des doubles viables, et non qu'il est syntaxiquement invalide ; je soupçonne qu'il s'agit d'un bogue), il serait toujours source de confusion. "c" aurait peut-être du sens sans causer de confusion, bien que cela suggérerait sans doute "monnaie" aux gens :)
"c" entre en conflit avec le caractère littéral pour les chaînes de caractères dans VB.Net, bien que même là, la grammaire soit un peu différente.
Je suppose qu'il y a une raison importante, mais cela m'irrite que vous obteniez une erreur de compilation si vous laissez le m hors du littéral. Ce n'est pas comme si c'était ambigu.
@JSON Cela fonctionne de cette façon pour les types d'entiers, car il n'y a pas d'ambiguïté - tant que cela correspond au type, aucune information ne sera perdue ou tronquée. Il n'en va pas de même pour les nombres décimaux. Conversion de la valeur double 0.42
en décimal peut vous donner une valeur différente que 0.42M
(et il en va de même pour l'utilisation d'un double littéral au lieu d'un littéral flottant). float val = 423.3
échoue également). Vous devez donc choisir entre un comportement subtilement erroné et une erreur de compilation qui prend une demi-seconde à corriger et qui est conforme au CLR et aux normes C#.
Un littéral réel suffixé par M ou m est de type décimal (monnaie) . Par exemple, les littéraux 1m, 1,5m, 1e10m et 123,456M sont tous de type décimal. Ce littéral est converti en une valeur décimale en prenant la valeur exacte et, si nécessaire, en l'arrondissant à la valeur représentable la plus proche en utilisant l'arrondi du banquier. Toute échelle apparente dans le littéral est préservée, sauf si la valeur est arrondie ou si la valeur est nulle (dans ce dernier cas, le signe et l'échelle seront 0). Ainsi, le littéral 2,900 m sera analysé pour former la décimale avec le signe 0, le coefficient 2900 et l'échelle 3.
Voir ceci (écrit par notre propre Jon Skeet) :
http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88466.aspx
et ceci (plus de détails) :
http://www.blackwasp.co.uk/CSharpNumericLiterals.aspx
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.