Intの数パーセントをどのように計算できますか?
たとえば、数値から30%を取得したい場合、このコード例を使用すると、間違った答えが返されます。
int number = 250;
int result = (number / 100) * 30;
結果は60
、そして本当の答えは75
、それを計算する方法はありますか?
除算する前に乗算:
int result = number * 30 / 100;
整数型で除算すると整数の結果が得られるため、結果が得られます。250/ 100は2です。除算する前に乗算すると、整数の結果が得られますが、少なくとも中間ステップでデータは失われていません。非常に大きな数を処理する必要がある場合でも、int
で許可されている範囲をオーバーフローする危険があります。
または、浮動小数点演算を使用できます。除算では整数の小数が生成されます。
int result = number * 0.30;
これは 予期しない結果 を生成する可能性があるため、上記のように整数のみを使用することをお勧めします。または3.0/10
の代わりに 0.30
。
(他の人が示唆したように)オペランドの切り替えも機能しますが、望まない場合に備えて、別の解決策があります。
int number = 250;
int result = static_cast<double>(number) / 100 * 30;
数が少ないと思われる場合は、向きを変えるだけです。
int result = (number * 30) / 100;
(括弧は不要ですが、明確にするのに役立ちます)。
これは、いずれかの数が数百万の場合は機能しませんが、それよりも小さい数の場合は問題ありません。
これを試して、
int number = 250;
float result = number * (float)(30/100.0);
フロートを使用:
float number = 250;
float result = (number / 100.0) * 30
また、そこにdeciamlポイントのある100.0を置くだけで十分かもしれません。
それを行うと、整数の250/100は20に等しく(100を200に2回だけ入れることができ、整数は残りの50を気にしません)、時間は30 = 60になります。
今私はいくつかの解決策について考えます:
int number = 250;
int result = number * 100;
result = (result / 100) * 30;
result /= 100;
スコア/アイテム* 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;
プログラム全体は次のようなものです。
double number , result;
cout << "Enter the number:";
cin >> number;
result = number * 30.0 / 100;
cout << "Result = " << result << endl;
そしてあなたはあなたの答えを得るでしょう...
浮動小数点演算を実行する必要があります。それ以外の場合、コンパイラはすべての演算を整数として実行します。
あなたは試すかもしれません
int result = (number / 100.0) * 30;