2014-12-29 108 views
-1

我正在嘗試計算不同屏幕尺寸的像素。現在我的問題是,在我的屏幕上(1080x1920)的公式寬度/ 1080 * 1080 = 1080,但對於另一個屏幕,寬度= 240 公式有結果0.有人可以解釋我爲什麼會發生這種情況?我必須爲我的價值選擇另一種類型嗎?我試過double,float和int。每次240 * 1080/1080的結果爲0.Android數學:240/1080 * 1080 = 0?

謝謝。

回答

1

您可能正在使用整數除法。

嘗試將.0添加到其中一個值。

例如

240.0/1080.0 * 1080.0 

這告訴它使用雙除法。作爲雙是方程式中

+1

http://stackoverflow.com/questions/3144610/java-integer-division-how-do-you-produce-a-double – Doomsknight

0

你使用整數,所以結果也是整數。 240/1080 = 0,導致0.xxx不是整數。你應該寫下:

float smthng = width/1080f * 1080f 

它會爲你返回正確的結果。

0

我覺得兩個選項:

1)你的價值被四捨五入

INT 1080通過INT 1080分給1

INT 240 INT 1080分給0

2)另一個屏幕不支持你用來獲得寬度的功能和一些你得到零的功能。

如果您發佈用於獲取值的代碼行並進行計算,這將有所幫助。

0

試試這個1.0 * 240/1080*1080

您需要在您使用哪種語言浮點型

0

操作? 如果使用:

int width = 1024; 
float ratio = width/1080 * 1080; 

比將是= 0.0(由1080寬度的整數除法,結果爲0)

嘗試使用:

float ratio= (width/1080.0)*1080.0 

另一點是:爲什麼你是否試圖計算(A/B)* B?它永遠是A!

+0

只是一個例子,在其他計算中我使用fE寬度/ 1920 * 1515 – user2798381

0

無論您選擇哪種類型的結果,您提供的操作數都是整數。只有計算結果從一個int被提升爲一個float - 到那個時候它已經是0了(因爲在整數運算中240/1080是0)。請注意,除法發生在乘法之前,因爲/和*的operator precedence相等,所以表達式僅從L到R進行評估。

如果你想使用浮點數,然後提供浮點輸入與

float result = 240.0/1080.0 * 1080.0 

最簡單的解決方法是使用整數運算,以保持和運行在不同的順序計算,如

int result = (240 * 1080)/1080.