web-dev-qa-db-ja.com

小数に整数を掛けても大丈夫ですか?

私は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に感謝)

20
javapowered

関係ありません-とにかくintdecimalに変換されます。*(decimal, int)演算子はなく、*(int, int)*(decimal, decimal)。 (もちろん、他のタイプもあります。)

現在、decimalを暗黙的にintに変換することはできませんが、逆変換は有効です。これがコンパイラーの機能です。

ただし、現在、代入演算子の右辺は10進数ではなく倍精度であるため、decVarの宣言を変更する必要があります。あなたは0.1メートルを意味します。セミコロンも必要です:)

33
Jon Skeet

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

この変換は 常に安全

変換に関する考慮事項

このタイプは、10進値をSByte、Int16、Int32、Int64、Byte、UInt16、UInt32、およびUInt64との間で変換するメソッドを提供します。これらの整数型から10進数への変換は、情報を失ったり例外をスローしたりすることのない変換を拡大しています。

8
Jon

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

また、2進数で正確に表すことができない数値があるため、浮動小数点の精度を保証することはできません。丸め誤差を最小限に抑えるために、他の予防措置を講じる必要があります。

1
ChrisF