0
public static int NUM_FRAMES = 8;
public static int FRAME_REPEAT_NO = 2;
int height = 24;
//bitmap.getWidth() is 168 and bitmap.getHeight() is 91

double w = bitmap.getWidth();
w = w/NUM_FRAMES;
w = w*FRAME_REPEAT_NO;
w = w*height;
w = w/bitmap.getHeight();

私はこれを行い、w正しい as 11.07 の値を取得します。

しかし、私がこれを行うとき:

double w  = FRAME_REPEAT_NO*(bitmap.getWidth()/NUM_FRAMES)*(height/bitmap.getHeight());

の値wは常に 0 です。

なぜこれが起こっているのか誰かが私に説明できますか?

PS私はAndroidアプリでそれをやっています...

4

4 に答える 4

1

intにキャストdouble

double w  = FRAME_REPEAT_NO*(bitmap.getWidth()/((double)NUM_FRAMES))*(height/((double)bitmap.getHeight()));
于 2012-07-10T05:20:51.930 に答える
1

浮動小数点演算が必要な状況で整数演算を使用しています。

double w = FRAME_REPEAT_NO*(bitmap.getWidth()/NUM_FRAMES)*(height/bitmap.getHeight());
//     w =              2 * (168             / 8       ) * (  24 / 91);
//     w =              2 * (21                        ) * ( 0 );
//     w = 0;

@JigarJoshi が指摘したように、解決策は浮動小数点演算を使用することです。彼の提案に従ってキャストするか、次のようにすることができます。

public static float NUM_FRAMES = 8.0f;
public static float FRAME_REPEAT_NO = 2.0f;
float height = 24.0f;

float w  = FRAME_REPEAT_NO * (bitmap.getWidth() / NUM_FRAMES) *
                             (height / bitmap.getHeight());
于 2012-07-10T05:30:23.413 に答える
0

BODMASルールに従ってください...このルールを使用して目的の出力を得ました...

優先度の高いものから低いものへ..

B - ブラケット

O - パワー

DM - 除算と乗算

AS - 足し算と引き算

 w =  ((w/NUM_FRAMES)*(FRAME_REPEAT_NO)*(height))/bitmap.getHeight();

出力:

    11.076923076923077
于 2012-07-10T05:24:09.290 に答える
0

他の人がすでにあなたの質問に答えているので、彼らの回答を繰り返すことはしませんが、1 つの提案をします。を使用して結果を計算することを検討してください

w = (double)(FRAME_REPEAT_NO * bitmap.getWidth() * height) / (double)(NUM_FRAMES * bitmap.getHeight())

これにより、除算を行う最後の最後まで、予測可能な整数の土地に住むことができます。したがって、結果のエラーは、複数のエラーを集約するのではなく、単一の操作から発生します。なんらかの理由で整数の結果を得たいと決めた場合は、double を削除しても、答えとして 11 を得ることができます。

大したことではありませんが、私はそれをそこに出そうと思いました.

編集:別の投稿へのコメントから、実際に 11 が必要であることがわかりました。したがって、double を完全に削除するだけです。

w = (FRAME_REPEAT_NO * bitmap.getWidth() * height) / (NUM_FRAMES * bitmap.getHeight())

答えは正確に 11 (整数) です。ちなみに、これは 11.0 の浮動小数点近似とは異なります。

于 2012-07-10T05:38:21.863 に答える