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
的值为11.07,这是正确的。
但是当我这样做时:
double w = FRAME_REPEAT_NO*(bitmap.getWidth()/NUM_FRAMES)*(height/bitmap.getHeight());
w
的值始终为0;
有人可以向我解释为什么会这样吗?
P.S。我在Android应用程序中这样做...
答案 0 :(得分:1)
将int
投放到double
double w = FRAME_REPEAT_NO*(bitmap.getWidth()/((double)NUM_FRAMES))*(height/((double)bitmap.getHeight()));
答案 1 :(得分: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());
答案 2 :(得分:0)
按照 BODMAS 规则...我使用此规则获得了所需的输出...
最高到最低优先级..
B - Brackets
O - 权力
DM - Divison and Multiplication
AS - 添加和减少
w = ((w/NUM_FRAMES)*(FRAME_REPEAT_NO)*(height))/bitmap.getHeight();
<强>输出:强>
11.076923076923077
答案 3 :(得分: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的方式不同。