2017-06-14 3 views
2
decimal l = 50.0M; 

のMサフィックスの関連性は何ですか - タイプは、変数の、独占的であるしかしWhat does the M stand for in C# Decimal literal notation?私はMが明示的に小数点としてタイプを述べることであることを示唆している他の回答見てきました小数リテラル

は、なぜサフィックスがあるべきですか?変数の型は、同様に、指定されていないとき、私はサフィックスの関連性を見ることができます:C#で

var l = 50.0M 
+0

こんにちは.. here..https参照してください。//stackoverflow.com/questions/977484/what-does-the-m-stand-for-in-c-sharp-decimal-をリテラル記法 – Wheels73

+0

答えは[right here](https://stackoverflow.com/a/977514/366904)でした。もう1つはリンク先の質問です。合理的な音が –

答えて

1

50.0あなたが暗黙的に変換しようとしているので、Mサフィックスなしで、リテラルdoubleですdoubledecimal(存在しない暗黙の変換)

を使用するdecimal l = 50.0M;によると:この小数点をその小数点の変数に割り当てます。

1

私はその理由は、右辺が代入文で最初に評価されるためだと思います。

右側の値は、左側の変数に割り当てられます。したがって、最初に右辺を評価してから左辺を調べ、型が異なる場合はキャストを行う必要があります。

+0

! – Sumith

1

変数の型が排他的に指定されている場合、なぜ接尾辞があるべきですか?

割り当てたい値に小数点がある場合のみ、キャストが必要です。あなたの場合、50.0doubleのリテラルを表します。 intdecimalにあるため、以下は、接尾辞またはキャストせずにコンパイルすることを

decimal d = (decimal)1.23456789123456789; 
Console.WriteLine(d); // Prints 1.23456789123457 
decimal e = 1.23456789123456789M; 
Console.WriteLine(e); // Prints 1.23456789123456789 

注:あなたはこの

decimal l = (decimal)50.0; // Do not do this! 

が、これは変換エラーをもたらす可能性のように、キャストを追加することにより、サフィックスを避けることができます変換が精度を失うことはありません:

decimal l = 50; 

あなたがMサフィックスをすることが別の場所で表現しています小数を操作S:

decimal tenPercentBroken = myDecimal * 0.1; // Does not compile 
decimal tenPercentCorrect = myDecimal * 0.1M; // Compiles fine 
+0

@CodyGrayありがとうございます、キャストや接尾辞なしで 'l = 50'の背後にある理由を述べました。 – dasblinkenlight

関連する問題