私はC#と.NETの初心者なので、これが単純すぎる質問である場合は非難します。
10進変数decVar
があります。整数変数intVar
を掛ける必要があります。結果はdecimal
である必要があります。では、整数変数をint
またはdecimal
として宣言する必要がありますか?
このコードを持っている、
decimal decVar = 0.1m;
decimal decRes = decVar * intVar;
私はそれをこのように宣言する必要があります:
int intVar = 3;
またはこのように:
decimal intVar = 3;
?
これは財務計算なので、結果は正確に0.3
である必要があります。
pd:コードが更新されました(Jonに感謝)
関係ありません-とにかくint
はdecimal
に変換されます。*(decimal, int)
演算子はなく、*(int, int)
と*(decimal, decimal)
。 (もちろん、他のタイプもあります。)
現在、decimal
を暗黙的にint
に変換することはできませんが、逆変換は有効です。これがコンパイラーの機能です。
ただし、現在、代入演算子の右辺は10進数ではなく倍精度であるため、decVar
の宣言を変更する必要があります。あなたは0.1メートルを意味します。セミコロンも必要です:)
違いはありません。乗算の1つの引数はdecimal
であるため、もう1つの引数もdecimal
に変換されます(まだ1つでない場合)。
この変換は 常に安全 :
変換に関する考慮事項
このタイプは、10進値をSByte、Int16、Int32、Int64、Byte、UInt16、UInt32、およびUInt64との間で変換するメソッドを提供します。これらの整数型から10進数への変換は、情報を失ったり例外をスローしたりすることのない変換を拡大しています。
int
またはdecimal
として宣言するかどうかは関係ありません。計算のためにdecimal
にキャストされます。
また、2進数で正確に表すことができない数値があるため、浮動小数点の精度を保証することはできません。丸め誤差を最小限に抑えるために、他の予防措置を講じる必要があります。