ホームページ > バックエンド開発 > C++ > C# で float を int にキャストすると、メソッドに応じて異なる結果が生成されるのはなぜですか?

C# で float を int にキャストすると、メソッドに応じて異なる結果が生成されるのはなぜですか?

Susan Sarandon
リリース: 2025-01-08 17:22:40
オリジナル
432 人が閲覧しました

Why Do Casting Floats to Ints in C# Produce Different Results Depending on the Method?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート