web-dev-qa-db-ja.com

intをfloatに変換します

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

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

Numberの値が50で、totalが100の場合、パーセンテージで50.00を取得する必要があります。少なくともそれが必要です。しかし、答えとして0.00を取得し続け、タイプにも多くの変更を試みましたが、役に立ちませんでした。

16
Jack

整数除算は切り捨てられるため、(50/100)は0になります。float(より良いdouble)にキャストするか、100.0double精度、100.0f for float precision)first、

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についても同じです)が、その後の最初の2つの場所に影響を与える可能性は非常に低いです小数点なので、おそらくどちらを選択しても問題ありません。

26
Daniel Fischer

cでの整数除算は結果を切り捨てるので、50/1000

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

((float)number/total)*100

または

50.0/100
6
Omkant

いいえ、整数を使用して式を実行するため、integer 50をinteger 100で除算し、その結果integer 0になります。それらの1つをfloatにキャストすると、動作するはずです。

浮動小数点が必要な場合は、定期的に1.0を乗算します。規則を覚えるよりも簡単です。

1
Alan Corey

整数演算をしているので、結果は正しいです。試して

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

ところで%fdoubleではなくfloatを想定しています。ここで変換された純粋な運によって、うまく機能します。しかし、一般的には、最近のCでは浮動小数点型としてほとんどdoubleを使用します。

1
Jens Gustedt

これは動作するはずです2ポイントに丸めます

       int a=53214
       parseFloat(Math.round(a* 100) / 100).toFixed(2);
0
Mustafa Kunwa

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

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

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

これはあなたに正しい答えを与えることができます

#include <stdio.h>
int main()
{
    float total=100, number=50;
    float percentage;
    percentage=(number/total)*100;
    printf("%0.2f",percentage);
    return 0;
}
0

これにより、必要な結果が得られます。

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

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

0
ALOToverflow