我正在嘗試計算不同屏幕尺寸的像素。現在我的問題是,在我的屏幕上(1080x1920)的公式寬度/ 1080 * 1080 = 1080,但對於另一個屏幕,寬度= 240 公式有結果0.有人可以解釋我爲什麼會發生這種情況?我必須爲我的價值選擇另一種類型嗎?我試過double,float和int。每次240 * 1080/1080的結果爲0.Android數學:240/1080 * 1080 = 0?
謝謝。
我正在嘗試計算不同屏幕尺寸的像素。現在我的問題是,在我的屏幕上(1080x1920)的公式寬度/ 1080 * 1080 = 1080,但對於另一個屏幕,寬度= 240 公式有結果0.有人可以解釋我爲什麼會發生這種情況?我必須爲我的價值選擇另一種類型嗎?我試過double,float和int。每次240 * 1080/1080的結果爲0.Android數學:240/1080 * 1080 = 0?
謝謝。
您可能正在使用整數除法。
嘗試將.0添加到其中一個值。
例如
240.0/1080.0 * 1080.0
這告訴它使用雙除法。作爲雙是方程式中
你使用整數,所以結果也是整數。 240/1080 = 0,導致0.xxx不是整數。你應該寫下:
float smthng = width/1080f * 1080f
它會爲你返回正確的結果。
我覺得兩個選項:
1)你的價值被四捨五入
INT 1080通過INT 1080分給1
INT 240 INT 1080分給0
2)另一個屏幕不支持你用來獲得寬度的功能和一些你得到零的功能。
如果您發佈用於獲取值的代碼行並進行計算,這將有所幫助。
試試這個1.0 * 240/1080*1080
您需要在您使用哪種語言浮點型
操作? 如果使用:
int width = 1024;
float ratio = width/1080 * 1080;
比將是= 0.0(由1080寬度的整數除法,結果爲0)
嘗試使用:
float ratio= (width/1080.0)*1080.0
另一點是:爲什麼你是否試圖計算(A/B)* B?它永遠是A!
只是一個例子,在其他計算中我使用fE寬度/ 1920 * 1515 – user2798381
無論您選擇哪種類型的結果,您提供的操作數都是整數。只有計算結果從一個int被提升爲一個float - 到那個時候它已經是0了(因爲在整數運算中240/1080是0)。請注意,除法發生在乘法之前,因爲/和*的operator precedence相等,所以表達式僅從L到R進行評估。
如果你想使用浮點數,然後提供浮點輸入與
float result = 240.0/1080.0 * 1080.0
最簡單的解決方法是使用整數運算,以保持和運行在不同的順序計算,如
int result = (240 * 1080)/1080.
http://stackoverflow.com/questions/3144610/java-integer-division-how-do-you-produce-a-double – Doomsknight