MSDN は次のように述べています。
「接尾辞 m がない場合、数値は double として扱われるため、コンパイラ エラーが発生します。」
"M" は何ですか:
decimal current = 10.99M;
支持する?
次のものとは異なりますか?
decimal current = (decimal)10.99
MSDN は次のように述べています。
「接尾辞 m がない場合、数値は double として扱われるため、コンパイラ エラーが発生します。」
"M" は何ですか:
decimal current = 10.99M;
支持する?
次のものとは異なりますか?
decimal current = (decimal)10.99
M は、数値をコード内の 10 進数表現にします。
あなたの質問の 2 番目の部分に答えるには、はい、それらは異なります。
decimal current = (decimal)10.99
と同じです
double tmp = 10.99;
decimal current = (decimal)tmp;
シグマより大きい数値の場合は問題ありませんが、10 進数を意味する場合は 10 進数を指定する必要があります。
更新:
うわー、私は間違っていました。私は自分の主張を証明するために IL をチェックしに行き、コンパイラーはそれを最適化しました。
更新 2 :
やっぱり私は正しかった!、あなたはまだ注意する必要があります。これら 2 つの関数の出力を比較します。
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Test1());
Console.WriteLine(Test2());
Console.ReadLine();
}
static decimal Test1()
{
return 10.999999999999999999999M;
}
static decimal Test2()
{
return (decimal)10.999999999999999999999;
}
}
最初は戻ります10.999999999999999999999
が、2 番目は戻ります11
補足として、 double は10 進数で 15 桁の精度を取得しますが、 decimal は0 から 28 までのスケーリング係数で 96 ビットの精度を取得します。したがって、範囲内の任意の数値を表すことができます ((-2 96から 2 96 ) / 10 (0 から 28) )
decimal current = 10.99M;
10 進数が必要であることをコンパイラーに伝えます。
decimal current = (decimal)10.99
double10.99
を 10 進数にキャストすることをコンパイラーに伝えます。
お金の略だと言う人もいます。M は、金融アプリケーションで小数を使用する必要があるためです。小数は浮動小数点数 (double) よりも正確であるため、小数を使用する必要があります。
D/d は double で既に使用されているため、10 進数のサフィックスは M/m です。M はお金を表すと示唆されていますが、Peter Golde は、M が単に 10 進数で次善の文字として選ばれたことを思い出しています。
10 進数は倍精度よりも有効桁数が多いため、より正確になる可能性があります。メモリの使用量もわずかに多くなります。特定の数学または物理学関連のアルゴリズム以外は、double または float で問題なく動作するはずです。
例えば
ANYNUMBER / 0.5d を実行すると、ANYNUMBER の半分は得られません。
ANYNUMBER / 0.5m を実行すると、毎回 ANYNUMBER の半分が得られます。
decimal
お金に使う
double
為替レートに使用
うーん… "D" は と混同しdouble
そうだから… "M" を選んだの?たぶん「お金」のため?少しばかげているようですが...決定的なものは見つかりませんでした。