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();

我这样做了,我得到的值为w11.07,这是正确的。

但是当我这样做时:

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

的值w始终为 0;

有人可以向我解释为什么会这样吗?

PS我在一个Android应用程序中做...

4

4 回答 4

1

投射intdouble

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

其他人已经解决了你的问题,所以我不会重复他们的答案,但我会提出一个建议。考虑使用计算结果

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

这使您可以生活在可预测的整数领域,直到您进行除法的最后一刻。因此,结果中的任何错误都来自单个操作,而不是聚合多个错误。如果出于某种原因你决定要得到一个整数结果,你可以放弃双打,仍然得到 11 作为答案。

没什么大不了的,但只是想我会把它放在那里。

编辑:我从您对另一篇帖子的评论中看到您实际上想要 11。好。所以完全放弃双打:

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

答案正好是 11(整数),顺便说一下,这与 11.0 的浮点近似值不同。

于 2012-07-10T05:38:21.863 回答