2013-11-27 31 views
2

我想知道總內存和它在一個偏好寫所以我寫了這個代碼:內存內部和整數作爲outpout?

File path = Environment.getDataDirectory(); 
StatFs stat = new StatFs(path.getPath()); 
long blockSize = stat.getBlockSize(); 
long totalBlocks = stat.getBlockCount(); 
long Size = totalBlocks * blockSize/1073741824; 

memory = (Preference) this.findPreference("free"); 
memory.setSummary(Long.toString(Size)+" GB"); 

1073741824對應1024 * 1024 * 1024獲得TEH技嘉。現在,問題是,爲什麼結果是一個整數?例如,在偏好設置爲「5」,但如果我做計算並將可變大小除以1024/1024,我得到5393,並且再次被1024除以5,26,但從那時起,我只收到5作爲輸出?我怎樣才能解決這個問題?

回答

3

long變量只能保存長整數。您必須改用浮點類型。例如:

double size = totalBlocks * blockSize/1073741824d; 

還有一點要確保的是,在計算中操作數的至少一個也是浮點類型(見d後綴爲常數)。否則,Java將計算一個整數值並將其分配給雙變量。

此外,按照慣例,您的變量不應以大寫字母開頭。這種風格是爲類型名稱保留的。

+0

謝謝!它有效,但現在我看到一個數字爲13,328445434570313如何只能得到第一個小數位? –

+0

一種可能性舍入小數點後第一位:'size = Math.round(size * 10)/ 10d'([via](http://stackoverflow.com/a/153753/1797912)) – Chriki

+0

@Mario G.很高興我能幫上忙!如果您發現我的答案有用,請考慮將其標記爲已接受的答案。 – Chriki

-1

長期執行部門宣佈GB爲float

long Size = totalBlocks * blockSize/1073741824f; 
+2

除非您將'Size'的類型從'long'更改爲'float'或'double',否則它仍然會以'5'結尾。 – Geobits

+0

您好,很抱歉,您的解決方案無法使用。 –

+0

錯過了您將尺寸聲明爲長。使用double或float來存儲結果。查看其他答案。 :) – Noah