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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-08 17:26:40451ブラウズ

Why Does Casting a Float Expression to an Integer 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 の値は 61 ですが、speed2 の値は 62 ですが、どちらも結果は 62 であると予想されています。詳しく調べると、speed1 では、浮動小数点式 6.2f * 10 が整数に切り捨てられる前に暗黙的に型 double に変換され、結果が 61 になることがわかります。

ただし、speed2 では、6.2f * 10 の結果が float 変数 tmp に明示的に代入されます。この中間ステップでは、値を最も近い float 値 (62) に丸めて、それを整数に変換します。

2 つの操作の主な違いは、中間表現です。最初のケースでは、コンパイラが浮動小数点式に対して高精度の表現を予約することを選択する可能性があり、これにより切り捨てが発生し、値 61 が生成されます。ただし、2 番目のケースでは、明示的な float 代入により丸めが強制され、値は 62 になります。

次のアクション内:

<code class="language-csharp">double d = 6.2f * 10;
int tmp2 = (int)d;</code>

ddouble 型になるため、double が変換され、丸められた値が整数に切り捨てられ、通常は値 62 になります。

浮動小数点式の変換における予期しない動作は、C# の浮動小数点処理の微妙な側面です。予期しない結果を回避し、数値型間の正確な変換を保証するには、このニュアンスを理解することが重要です。

以上がC# で Float 式を整数にキャストすると、メソッドに応じて異なる結果が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。