0

そのため、コードの型キャストをどこに実装する必要があるかを理解するのに苦労しています。型キャストの目的は理解していますが、特定の状況で型キャストがどこに行くべきかがわかりません (または考えすぎています)。

だから私には機能があります。入力を受け取り、それを 16 進形式で出力します。

void PrintHex(int InNum)
{
cout << hex << setiosflags (ios_base::showbase) << InNum;
};

問題は、期待どおりに int を受け取るのではなく、クラスのメンバー関数から float を受け取ることです。

float Sphere::CalcCircumference()
{
return (Pi * (Radius*2));
};

精度の低下を避けるために、float を int に型キャストする必要があります。しかし、正確にはどこでこれを行うのですか? 円周を決定し、結果を静的な形式で返すメンバー関数でそれを行う必要があるかもしれないと感じています。確信はないけど。

4

2 に答える 2

3

あなたの質問は紛らわしいです:あなたは精度を失いたくないと言いましたが、intにfloatをキャストすると精度が失われます。例えば、

float i = 1.3;
int j = (int)i; // j get the value 1

float変数の内容をintとして出力したいので、精度を失うことはないと思います。その場合は、次の方法があります。

float i = 1.3;
int j = *((int*)&i); // j get the int representation value of i

浮動小数点型の丸め誤差を理解していただければ幸いです。コンピュータでは、たとえば0.2を正確に表すようなものはありません。したがって、浮動小数点には常にいくつかの小さなエラーがあります。しかし、それはこの関数の範囲外です。

于 2012-11-02T17:28:19.470 に答える
0

型キャストは必要ありません。関数を呼び出すだけです。

PrintHex(sphere.CalcCircumference());

コンパイラーは、型キャストとまったく同じ方法でfloatをintに変換します。

于 2012-11-02T17:16:43.650 に答える