0

コンパイルしようとするたびに、

24 [警告]intからへの変換float

83 [警告]intから変換中float

int a , b = 8;
float c = 5.2;
float d = 8E3;
a = static_cast<float>(b) * c; // 24
cout << a << "\n";
cout << d << "\n";


int x, y, answer;
x = 7;
y = 9;
answer = 5;
answer *= (x + y);
cout << answer << "\n";


answer *= x + y;
cout << answer << "\n";


float m = 33.97;
answer += (x + y + m); // 83
cout << answer << "\n";

私が間違っていることに関する提案はありますか?

4

3 に答える 3

2
a = static_cast<float>(b) * c;

aは でありint、方程式の右側は two の乗算でありfloats、中間float値になり、暗黙的に にキャストされ、表示されintている警告が発生します。

また:

answer += (x + y + m);

answerint型であり、 and もx同様yですが、misfloatであり、右辺の中間結果が a になりますfloat

これらの変換により、float結果の小数値が切り捨てられます。次のように明示的にキャストすることで、警告を取り除くことができますint

a = static_cast<int>(static_cast<float>(b) * c);
answer += static_cast<int>(x + y + m);
于 2013-10-21T05:29:54.860 に答える
1

コンパイラが浮動小数点値を整数に変更しているため、警告が表示され、結果が切り捨てられます。

int a;
float f = 3.2;
a = f; // a is 3, a trunctated 3.2
于 2013-10-21T05:30:14.353 に答える
1

あなたの質問は、int から float ではなく、float から int への変換に関するものです。

基本的にあなたは何も悪いことをしていません。値が切り捨てられるため、これは単なる警告です (おそらく、予期しないことです)。本当に float から int を取得したいことをコンパイラに伝えるには、次のように明示的にキャストすることができます。

a = static_cast<int>(static_cast<float>(b) * c);

その後、警告は表示されなくなります。

于 2013-10-21T05:30:23.830 に答える