1

Visual Studio 2008 で次のコードをコンパイルして実行するたびに、なぜでしょうか。

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

答えが 25 であるのに、間違った値の 26 を取得します。

ただし、ダブルスで静的キャストを使用すると、25 という正しい答えが得られます。

間違った出力をどのように説明できますか?

4

2 に答える 2

9

その通りです。

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

代わりに何を期待しますか?コンパイラは最初に右側を評価し、次に暗黙的に int に変換します。したがって26.026

追加する前にキャストすると、 and が追加さ1015、結果は25:)

于 2008-11-24T00:07:22.130 に答える
2

実際、自動変換を行う場合、どちらの方法でも丸めを浮動小数点数に依存することはできません。26.0 が 26.00005 で表される場合は 26 に丸められ、25.999995 で表される場合は 25 に丸められます。確実にしたい場合はround、 で定義されている標準 C 関数 を使用してmath.hください。したがって、 26.0が 26 になるというのは正しくありません。

于 2008-11-24T01:38:18.343 に答える