C# での浮動小数点数の整数への強制変換の違い: 変換方法は結果に影響します
C# では、結果を整数にキャストするときに浮動小数点演算で予期しない動作が発生する可能性があります。次のコード スニペットを考えてみましょう:
<code class="language-csharp">int speed1 = (int)(6.2f * 10); float tmp = 6.2f * 10; int speed2 = (int)tmp;</code>
理論的には、speed1 とspeed2 は同じ値を生成するはずですが、驚くべきことに、結果は異なります。
<code>speed1 = 61 speed2 = 62</code>
なぜこのようなことが起こっているのでしょうか?
問題の核心は浮動小数点演算であり、丸め誤差が発生する可能性があります。 (int)(6.2f 10) では、値 6.2f 10 (約 61.999998) が整数に切り捨てられ、結果は 61 になります。
対照的に、int Speed2 = (int)tmp では、値 6.2f * 10 は最初に最も近い浮動小数点値である 62 に丸められます。この丸められた値は整数に変換され、結果は 62 になります。
予測可能な動作を確保するには、暗黙的な変換に依存するのではなく、丸め演算に Math.Round または同様の関数を使用することを一般的にお勧めします。
以上がC# で float を int にキャストすると、メソッドに応じて異なる結果が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。