2012-02-18 210 views
2

我试图计算图像的长宽比:Java浮点数学错误?

Log.d("img.width:", String.valueOf(img.getIntrinsicWidth())); 
Log.d("img.height:", String.valueOf(img.getIntrinsicHeight())); 
float aspect = ((float)img.getIntrinsicWidth())/((float)img.getIntrinsicWidth()); 
Log.d("aspect:", String.valueOf(aspect)); 

然而,这会产生意想不到的结果:

img.width: 297 
img.height: 167 
aspect:  1.0 

这似乎是它有一个简单的答案,但我想不出它出。

回答

8

您将宽度除以宽度。尝试用高度代替其中的一个。

+0

哦哇。是的,这会导致问题。 – 2012-02-18 06:18:59

5

您有一个错字。

float aspect = ((float)img.getIntrinsicWidth())/
               ((float)img.getIntrinsicWidth()); 

您正在由宽度,这将总是由高度代替产生1,除分割宽度:

float aspect = ((float)img.getIntrinsicWidth())/
               ((float)img.getIntrinsicHeight()); 
2

它的一个错字,它们中的一个必须是高度。您将通过宽度宽

float aspect = ((float)img.getIntrinsicWidth())/((float)img.getIntrinsicWidth()); 
1

有你尝试float aspect = (new float(img.getIntrinsicWidth()))/(new float(img.getIntrinsicWidth()));

+0

为什么你会期望这给出正确的答案? – 2012-02-18 06:18:06

+0

没有注意到宽度/宽度,原始海报造成的错误,但认为铸件可能存在问题,因此可能尝试创建新实例会有所帮助。 – Churk 2012-02-18 06:20:18

1

你有一个错字,你将通过宽度宽。应该可以按高度宽度。另外,为了让它在眼睛上更容易一点,你不需要将双方都分配给使用浮动物;如果右侧是一个,则左侧将被自动浮动。

float aspect = img.getIntrinsicWidth()/(float)img.getIntrinsicHeight();