10

int の数パーセントを計算するにはどうすればよいですか?
たとえば、数値から 30% を取得したい場合、このコード例を使用すると、間違った答えが得られます。

int number = 250;
int result = (number / 100) * 30;  

結果は で60、本当の答えは75です。それを計算する方法はありますか?

4

11 に答える 11

16

割る前に掛ける:

int result = number * 30 / 100;

得られる結果が得られる理由は、整数型で除算すると整数の結果が生成されるためです。250 / 100 は 2 です。除算の前に乗算しても整数の結果が得られますが、少なくとも途中のステップでデータが失われることはありません。本当に巨大な数を処理する必要がある場合は、許可されている範囲をオーバーフローする危険がintあります。

別の方法として、除算によって整数の分数を生成できる浮動小数点演算を使用することもできます。

int result = number * 0.30;

ただし、これにより予期しない結果が生じる可能性があるため、上記のように整数のみを使用することをお勧めします。または3.0/10の代わりに書きます0.30

于 2013-07-01T13:40:29.587 に答える
3

オペランドの切り替え(他の人が示唆したように)も機能しますが、したくない場合に備えて、別の解決策があります:

int number = 250;
int result = static_cast<double>(number) / 100 * 30; 
于 2013-07-01T13:45:24.583 に答える
3

数字が小さい(っぽい)と仮定すると、それを好転させることができます:

 int result = (number * 30) / 100;

(括弧は必須ではありませんが、明確にするのに役立ちます)。

いずれかの数が数百万の場合、これは機能しませんが、それより小さい数の場合は問題ありません。

于 2013-07-01T13:40:57.897 に答える
2

これを試して、

int number = 250;
float result = number  * (float)(30/100.0);
于 2013-07-01T13:42:26.627 に答える
0

今、私はいくつかの解決策を考えています:

int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
于 2013-07-01T13:45:44.920 に答える
0

浮動小数点演算を実行する必要があります。そうしないと、コンパイラはここですべての演算を整数として実行します。

あなたは試すかもしれません

int result = (number / 100.0) * 30;
于 2013-07-01T13:41:23.943 に答える
0

フロートを使用:

float number = 250;
float result = (number / 100.0) * 30

また、そこに 100.0 と deciaml ポイントを入れるだけで十分かもしれません。

250 / 100 の整数は 20 に等しいので (200 に 100 を 2 回だけ入れることができ、整数は残りの 50 を気にしません)、30 = 60 を掛けます。

于 2013-07-01T13:44:03.813 に答える
-1

点数/項目*30 ex;

15%

int score, items;
cout<<"input your score"<< score<<endl;
cin>>score;
cout<<"input number of items"<<items<<endl;
cin>>items;
float total=score/items*15
cout<<"you got "<<total<<""<<endl;
于 2016-09-21T07:20:55.253 に答える