23

MSDN は次のように述べています。

「接尾辞 m がない場合、数値は double として扱われるため、コンパイラ エラーが発生します。」

"M" は何ですか:

decimal current = 10.99M;

支持する?

次のものとは異なりますか?

decimal current = (decimal)10.99
4

3 に答える 3

35

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) )

于 2012-04-18T19:09:03.227 に答える
10

説明

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為替レートに使用

詳しくは

于 2012-04-18T19:05:21.397 に答える
2

うーん… "D" は と混同しdoubleそうだから… "M" を選んだの?たぶん「お金」のため?少しばかげているようですが...決定的なものは見つかりませんでした。

于 2012-04-18T19:06:12.407 に答える