decimal を double にキャストするときに奇妙な問題が発生しています。
次のコードは true を返します。
Math.Round(0.010000000312312m, 2) == 0.01m //true
ただし、これを double にキャストすると、false が返されます。
(double)Math.Round(0.010000000312312m, 2) == (double)0.01m //false
Math.Pow を使用したいときにこの問題が発生し、10 進数の Math.Pow オーバーロードがないため、10 進数を double にキャストする必要がありました。
これは文書化された動作ですか? decimal を double にキャストする必要がある場合、どうすれば回避できますか?
Visual Studio のスクリーンショット:
Math.Round をキャストして、次の結果を 2 倍にします。
(double)Math.Round(0.010000000312312m, 2) 0.0099999997764825821 double
(double)0.01m 0.01 double
アップデート
わかりました、私は次のように問題を再現しています:
- WPF アプリケーションを実行し、開始直後にウォッチで出力を確認すると、空のプロジェクトのように true になります。
- スライダーから計算アルゴリズムに値を送るアプリケーションの一部があります。間違った結果が得られ、計算方法にブレークポイントを設定しました。ここで、ウォッチ ウィンドウで値を確認すると、false になります (何も変更せずに、ウォッチ ウィンドウを更新するだけです)。
- いくつかの小さなプロジェクトで問題を再現したらすぐに、ここに投稿します。
更新2
残念ながら、小規模なプロジェクトで問題を再現することはできません。エリックの答えがその理由を説明していると思います。