小数にintを掛けても問題ありませんか?

私はC#と.NETの初心者ですので、あまりにも簡単な質問であれば謝罪します。

decimal変数 decVar があります。 私はそれを整数変数 intVar で掛ける必要があります。 結果を decimal にする必要があります。 ですから、整数変数を int または decimal として宣言する必要がありますか?

このコードを持つと、

decimal decVar = 0.1m;
decimal decRes = decVar * intVar;

私はこれを次のように宣言すべきですか?

int intVar = 3;

またはこのように:

decimal intVar = 3;

これは財務計算なので、結果は 0.3 と正確に一致する必要があります。

upd : Code updated (thanks to Jon)

19

3 答え

とにかく *(10進、int)演算子はなく、 intdecimal *(int、int)および *(10進、10進) (もちろん、他のタイプもあります。)

暗黙のうちに decimalint に変換することはできませんが、逆変換は有効です。

ただし、代入演算子の右辺は小数点ではなく二重であるため、 decVar の宣言を変更する必要があります。あなたは0.1mを意味します。セミコロンも好きでしょう:)

29
追加された

違いはありません。乗算の1つの引数は decimal であるため、もう1つは decimal に変換されます(まだ存在しない場合)。

この変換は常に安全です

コンバージョンの考慮事項

     

この型は、Decimal値を変換するメソッドを提供します。   SByte、Int16、Int32、Int64、Byte、UInt16、UInt32、およびUInt64。   これらの整数型からDecimalへの変換は拡大しています   情報を失うことはなく、例外をスローすることもありません。

8
追加された

int または decimal として宣言するかどうかは関係ありません。計算のために decimal にキャストされます。

また、バイナリで正確に表現できない数があるため、浮動小数点精度を保証することもできません。丸め誤差を最小限に抑えるために、他の予防策を講じなければなりません。

1
追加された
10進数で正確に表すことのできない数字もあります。例えば、1m/5mは不正確ではありませんが、1d/5dは不正です。
追加された 著者 phoog,
浮動小数点数のバイナリ表現の問題を指摘するためのアップ投票。
追加された 著者 Perception,