2

私のコードでは、出力は 2.000000 ですが、2.11111 であるはずです

#include<stdio.h>main(){
int i,j;
float r;
i = 19;
j = 9;
r = i / j;
printf(" %f ",r);}

なぜ機能しないのですか?

4

6 に答える 6

8

i / jは整数除算だからです (両方のオペランドが整数です) 。結果を に格納しても違いはありませんfloat

iとのいずれかjが floatの場合、目的の結果が得られます。たとえば、次のようになります。

r = ((float)i) / j;
于 2013-09-14T17:36:26.377 に答える
2

変化する

r = i / j;

r = i / (float) j;

ijは整数で、i / jは整数除算です。

于 2013-09-14T17:36:29.497 に答える
2

これは、除算が a に割り当てられる前に整数で行われるためfloatです。とのタイプを変更しij修正floatします。

main(){
    float i,j,r;
    i = 19;
    j = 9;
    r = i / j;
    printf(" %f ",r);
}

または、次のように部門でキャストiすることもできます。float

r = ((float)i) / j;
于 2013-09-14T17:36:44.143 に答える
0

は整数除算 (両方のオペランドが整数) であるためi / j、それらの除算の結果は整数 (小数部分は破棄されます) になり、これが float 型の変数に再び割り当てられるため、コンパイラは整数の結果を再びr型キャスト (つまり、暗黙的な型キャスト)します。 float2.000000 を表示

i と j のいずれかが float の場合、目的の結果が得られます。たとえば、次のようになります。

r = ((float)i) / j;//明示的な型キャスト

于 2013-09-14T18:49:40.240 に答える
0

2つの整数をダイビングすると、整数がワイルドになります(あなたの場合、2後で浮動小数点数に変換されます):

iorを floatに変換するだけjです (または、最初に float として宣言します):

r = ((float) i) / j;

実施例

于 2013-09-14T17:36:56.330 に答える
0

ここで、int は、RHS (整数除算、デフォルトでは商 = 整数) が評価された後、デフォルトで float に変換されました。そのため、2.000000 が得られます。RHS で任意の数値を型キャストして、求める結果を取得します。

c で型変換を理解してからキャストする必要があることを確認してください。適切なソースでそれらを確認してください。一般に、自動変換は、情報を失うことなく狭いオペランドを広いオペランドに変換できるものです。たとえば、float + integer (64 ビット マシン上) などの例で整数を浮動小数点に変換します。[wiki より]。

例 float x =7.8 ; int k=9; int j = k + x = 16 .

ここでは、最初に k が float に変換され、次に加算され、最後に結果が整数に切り捨てられます。

于 2013-09-14T17:56:50.340 に答える