もしあれば、違いは何ですか?C#小数点へのキャスト
decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
もしあれば、違いは何ですか?C#小数点へのキャスト
decimal d = (decimal) myDouble;
decimal d = new decimal(myDouble);
decimal d = Convert.ToDecimal(myDouble);
違いはありません。だから、最後彼らはすべてのコールnew decimal(double)
に
public static decimal ToDecimal(float value)
{
return (decimal) value;
}
:10進数で
:変換で
public static explicit operator decimal(double value)
{
return new decimal(value);
}
あなたは、ソースを見れば。
これらはすべて同じ結果を達成します。
が明示的にdecimal
を入力しmyDouble
をキャスト新しい変数を作成します。方法1:ただし、ここではより多くの分解説明があります。キャストするとき、"このタイプAのオブジェクトは実際にはB型由来のオブジェクトであるか、キャスト演算子はAからBにキャストするために存在します。
方法2は、コンストラクタのオーバーロードを介して適切なタイプ(decimal
)にmyDouble
を変換する新しい変数を作成します。コンストラクタを呼び出すと、"コンストラクタに渡された引数に基づいて新しいオブジェクトを作成する"と表示されます。
方法3は、別の基本データ・タイプ(decimal
)に基本データ・タイプ(double
)に変換します。 Convert.ToDecimal()
のようなものを使用すると、"このオブジェクトはタイプBではありませんが、タイプBのオブジェクトにする方法があります。 Convert
MSDNについて
状態:
変換方法は、他の全てのベース・タイプにすべての基本型を変換するために存在します。ただし、実行される実際の変換操作は、次の3つのカテゴリに分類されます。
型からその型への変換は、単にその型を返します。実際には変換は行われません。
例2は、コンストラクタのオーバーロードを示しています。また、例1のキャスト例は、あなたの定義に従ったキャストではありません。なぜなら、もちろん10進数はdoubleから派生していないからです(逆もありません)。むしろ、C#キャスト演算子には、(1)参照型の表現保存型のキャスト、および(2)組み込みまたはユーザー定義の明示的(または暗黙的)変換を呼び出すという2つの関数があります。 – phoog
実際には、機能的には違いはありません。 これらは異なる方法です同じ結果を達成します。
Convert.ToDecimalの場合は、IFormatProvider(カルチャ)という形式を指定する可能性があるので、より柔軟性があります。
多文化環境を気にしない場合は、好きなものを選んでください。
'(小数)値'と '新しい小数点(値)'の間に違いがあるかもしれません:最初のものは組み込みの二重小数変換演算子を呼び出し、小数のコンストラクタのオーバーロードを呼び出します。確かに、ネイティブコードはおそらく同じですが、ILはおそらく異なっており、C#のセマンティクスは確かに異なります。 – phoog
@phoog 2つの間に違いはありません。 「組み込みの」二進数から十進への変換演算子はありません。答えに提供される最初のメソッドは、呼び出されるメソッドです。あなたが提供した最初の方法は、コールツリーの1つのメソッドを提供する2番目の方法を呼び出します。 – JKor
@ JKか何も提供していませんでした。私はただコメントしています。 – phoog