26

私は解決しようとしています:

int total=0, number=0;
float percentage=0.0;

percentage=(number/total)*100;
printf("%.2f", percentage);

数値の値が 50 で合計が 100 の場合、パーセンテージとして 50.00 を取得する必要があり、それが私が望むものです。しかし、私は答えとして 0.00 を取得し続け、型に多くの変更を試みましたが、うまくいきませんでした。

4

8 に答える 8

35

整数除算は切り捨てられるため、(50/100)結果は 0 になります。最初にfloat(より良い) にキャストするか、 (精度のために、精度のためにdouble) を掛けることができます。100.0double100.0ffloat

double percentage;
// ...
percentage = 100.0*number/total;
// percentage = (double)number/total * 100;

また

float percentage;
// ...
percentage = (float)number/total * 100;
// percentage = 100.0f*number/total;

浮動小数点演算は連想演算ではないため、 と の結果は100.0*number/total若干(double)number/total * 100異なる場合があります ( も同様ですfloat)。

于 2012-11-23T13:40:34.873 に答える
8

50/100Cの整数除算は結果を切り捨てるので、0

望ましい結果を得たい場合は、これを試してください:

((float)number/total)*100

また

50.0/100
于 2012-11-23T13:40:03.310 に答える
2

いいえ、整数を使用して式を実行するため、整数50 を整数100 で除算すると、整数0 になります。そのうちの 1 つを a にキャストするfloatと、機能するはずです。

于 2012-11-23T13:39:32.610 に答える
2

あなたは整数演算を行っているので、結果は正しいです。試す

percentage=((double)number/total)*100;

ところで、 a ではないことが%f期待されます。ここで変換されるのは運だけなので、うまくいきます。しかし、一般的には、最近の C では浮動小数点型として使用することがほとんどです。doublefloatdouble

于 2012-11-23T13:39:37.713 に答える
2

浮動小数点が必要な場合は、定期的に 1.0 を掛けます。ルールを覚えるよりも簡単です。

于 2018-06-13T01:57:53.127 に答える
0

コードを次のように変更します。

int total=0, number=0;
float percentage=0.0f;

percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);
于 2012-11-23T14:21:37.280 に答える
0

これにより、必要な結果が得られるはずです。

double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);

最初のオペランドは double であることに注意してください

于 2012-11-23T13:41:05.787 に答える