質問
Visual Studio 2008で次のコードをコンパイルして実行するときはいつでも:
double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);
答えが25の場合、間違った値26が返されます。
ただし、doubleで静的キャストを使用すると、25という正しい答えが返されます。
間違った出力はどのように説明できますか?
解決
まったく正しい。
double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);
代わりに何を期待しますか?コンパイラは最初に右側を評価し、次に暗黙的にintに変換します。したがって、 26.0
は 26
追加する前にキャストすると、 10
および 15
が追加され、 25
になります:)
他のヒント
実際には、自動変換を行う際に、浮動小数点数に依存してどちらの方法でも丸めることはできません。 26.0が26.00005で表される場合、26に丸められ、25.999995で表される場合、25に丸められます。確実にしたい場合は、定義済みの標準C関数 round
math.h
にあります。 したがって、26.0が26 になったというのは正しくありません。
所属していません StackOverflow