MはC#の10進リテラル表記で何を表していますか?


312

10進数のデータ型を操作するには、変数の初期化でこれを行う必要があります。

decimal aValue = 50.0M;

Mパーツは何を表していますか?

回答:


387

他の人が言ったように、それは10進数リテラルであることを意味します。ただし、起源はおそらくこの回答の他の場所で示唆されたものではありません。C#注釈付き標準(ECMAバージョンではなく、MSのバージョン):

decimalサフィックスは、M / D / dは既にによって撮影されたので、Mですdouble。Mは金の略であることが示唆されていますが、ピーターゴールデは、Mが単にの次に優れた文字として選ばれたことを思い出しdecimalます。

同様の注釈は、C#の初期バージョンにはそれぞれ「Y」と「S」byteshortリテラルが含まれていたと述べています。彼らはあまり役に立たないという理由で落とされました。


6
それでは、なぜE / eが次善の手紙ではなかったのかという疑問が残ります。
VVS

61
"e"は、すでにリテラルで使用されているという点で問題があります。たとえば、「2e4m」は有効なリテラル(10進数の20000)です。あいまいさがない場合でも( "1e"は、実行可能なdoubleの範囲外であることを示唆する奇妙なコンパイラエラーメッセージで終了しますが、構文的に無効ではありません。バグだと思われます)、それでも問題はありません。紛らわしい。"c"は混乱を招くことなく意味をなす可能性がありますが、間違いなく人々に "通貨"を示唆するでしょう:)
Jon Skeet

7
"c"はVB.Netの文字列の文字リテラルと競合しますが、文法は少し異なります。
Joel Coehoorn、2009年

3
C#とVBで異なるので、それほど問題にはなりません。VBにはすでにIIRCなどの異なる16進構文があります。
Jon Skeet、

9
「Decimal」の音節を配置すると、「De Ci Mal」になります。これらは、使用するのが最も理にかなっています。Dは既に使用されています。Cは文字である可能性があり、Mは論理的な選択のようです。
アーロンフランケ2018

27

C#仕様から:

var f = 0f; // float
var d = 0d; // double
var m = 0m; // decimal (money)
var u = 0u; // unsigned int
var l = 0l; // long
var ul = 0ul; // unsigned long

大文字または小文字の表記を使用できることに注意してください。


19

Mは、「10進数」の最初のあいまいでない文字を指します。追加しない場合、数値はdoubleとして扱われます。

Dはdoubleです。


4
いくつかの重要な理由があると思いますが、リテラルからmを省略すると、コンパイル時エラーが発生するのはイライラします。あいまいなわけではありません。
SeaDrive 2009

1
@JSON整数型の場合、あいまいさがないため、そのように機能します。型に適合している限り、情報が失われたり文字化けしたりすることはありません。同じことは10進数には当てはまりません。double値0.42をdecimalにキャストすると、異なる値が得られます0.42M(floatリテラルの代わりにdoubleリテラルを使用した場合も同じです- float val = 423.3失敗します)。したがって、微妙に間違った動作と、修正に0.5秒かかり、CLRおよびC#標準に準拠するコンパイラエラーのどちらかを選択します。
Luaan

1
「deciMal」のような「M」
Shadi Namrouti

2

Mまたはmが接尾辞となる実数リテラルは、10進数タイプです。たとえば、リテラル1m、1.5m、1e10m、および123.456Mはすべて10進数型です。このリテラルは、正確な値を取り、必要に応じて銀行の丸めを使用して最も近い表現可能な値に丸めることにより、10進値に変換されます。値が丸められるか、値がゼロ(後者の場合、符号とスケールが0になる)でない限り、リテラルで明らかなスケールは保持されます。したがって、リテラル2.900mは解析され、符号0、係数2900、スケール3の10進数が形成されます。

実際のリテラルについてもっと読む


0

まあ、私はMが仮数を表すと思います。小数はお金を節約するために使用できますが、小数がお金のためだけに使用されるという意味ではありません。


それは確かに推測であり、「最初に利用可能な曖昧でない文字」仮説よりもはるかに説得力がありません。裏付けとなる証拠がある場合は、それを回答に含めてください。
isherwood
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.