2011-09-12 25 views
1

私は、Cで2つの非負整数値をユーザに尋ねていますが、これをパーセンテージ(小数点以下の桁数)に変換します。残念ながら、私のfloatは0になっています。なぜですか、どうすれば修正できますか? intで割っCの浮動小数点

int a = 5; 
int b = 10; 
int total = a + b; 

float a_percent = a/total; 
float b_percent = b/total; 

printf("%.2f, %.2f\n", a_percent, b_percent); 

答えて

1

intは常にintを返します。

float a_percent = (float) a/total; 
float b_percent = (float) b/total; 
1

私はCの専門家ではないけど、int型でint型を分割することは、常にint型になりので、私の推測では、次のとおりです。あなたはfloat分割する前に2つの引数のいずれかを確認する必要があります。

あなたはこのような何かをする必要があるかもしれません。あなたが最初に、整数除算を実行後、浮動小数点に結果を変換している

float a_percent = (float)a/total; 

float b_percent = (float)b/total; 
1

。これはあなたが望む結果を与えません。 total浮動小数点値を先頭に(つまり、型が自動的に昇格されるように)設定するか、除算を実行する前にab(float)をキャストします。

1

整数浮動小数点数はここでは使用していません。 試してみてください。

float a_percent = a/(float)total; 

float b_percent = b/(float)total; 
2

あなたは、整数を使用している、浮動小数点数を使用していない、ので、整数除算は、(フロートに割り当てられ、その後である)ゼロを与えます。

浮動小数点演算を実行するには、最初に整数(またはそれらのうちの少なくとも1つ)を浮動小数点数に変換する必要があります。あなたは固定小数点を使用して幸せになることがあり、単純な比率については

float total = a + b; // exact 
float ap = a/total; 
float bp = b/total; // OK, these are now floating-point operations 
0

:便利な、私たちはtotalを使用しています。あなたの分子(aまたはb)に100を掛けるだけで、あなたはその部門からパーセンテージを得るでしょう。外国為替:あなたは100.0を掛けまで

他の人が指摘してきた問題に加えて
int a = 5; 
int b = 10; 

int total = a + b; 

int a_percent = 100*a/total; 
int b_percent = 100*b/total; 

printf("a%%=%d, b%%=d\n", a_percent, b_percent); 
2

、比率はパーセントではありません。

関連する問題