web-dev-qa-db-ja.com

C ++で数値のパーセントを取得する

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

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

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

8
user1544067

除算する前に乗算:

int result = number * 30 / 100;

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

または、浮動小数点演算を使用できます。除算では整数の小数が生成されます。

int result = number * 0.30;

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

15
Joni

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

int number = 250;
int result = static_cast<double>(number) / 100 * 30; 
2
Sceptical Jule

数が少ないと思われる場合は、向きを変えるだけです。

 int result = (number * 30) / 100;

(括弧は不要ですが、明確にするのに役立ちます)。

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

2
Mats Petersson

これを試して、

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

フロートを使用:

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

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

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

0
Ms. Nobody

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

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

スコア/アイテム* 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;
0
marvin orsua

プログラム全体は次のようなものです。

double number , result;

cout << "Enter the number:";
cin >> number;

result = number * 30.0 / 100;
cout << "Result = " << result << endl;

そしてあなたはあなたの答えを得るでしょう...

0
user3506720

浮動小数点演算を実行する必要があります。それ以外の場合、コンパイラはすべての演算を整数として実行します。

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

int result = (number / 100.0) * 30;
0
Emil Sit