私は解決しようとしています:
int total=0, number=0;
float percentage=0.0;
percentage=(number/total)*100;
printf("%.2f", percentage);
数値の値が 50 で合計が 100 の場合、パーセンテージとして 50.00 を取得する必要があり、それが私が望むものです。しかし、私は答えとして 0.00 を取得し続け、型に多くの変更を試みましたが、うまくいきませんでした。
整数除算は切り捨てられるため、(50/100)
結果は 0 になります。最初にfloat
(より良い) にキャストするか、 (精度のために、精度のためにdouble
) を掛けることができます。100.0
double
100.0f
float
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
)。
50/100
Cの整数除算は結果を切り捨てるので、0
望ましい結果を得たい場合は、これを試してください:
((float)number/total)*100
また
50.0/100
いいえ、整数を使用して式を実行するため、整数50 を整数100 で除算すると、整数0 になります。そのうちの 1 つを a にキャストするfloat
と、機能するはずです。
あなたは整数演算を行っているので、結果は正しいです。試す
percentage=((double)number/total)*100;
ところで、 a ではないことが%f
期待されます。ここで変換されるのは運だけなので、うまくいきます。しかし、一般的には、最近の C では浮動小数点型として使用することがほとんどです。double
float
double
浮動小数点が必要な場合は、定期的に 1.0 を掛けます。ルールを覚えるよりも簡単です。
コードを次のように変更します。
int total=0, number=0;
float percentage=0.0f;
percentage=((float)number/total)*100f;
printf("%.2f", (double)percentage);
これにより、必要な結果が得られるはずです。
double total = 0;
int number = 0;
float percentage = number / total * 100
printf("%.2f",percentage);
最初のオペランドは double であることに注意してください