2013-11-27 44 views
2

我想知道可用的手机内存,所以我写了这段代码。圆号只有第一位小数位

File path2 = Environment.getDataDirectory(); 
StatFs stat2 = new StatFs(path.getPath()); 
long blockSize2 = stat.getBlockSize(); 
long availableBlocks = stat.getAvailableBlocks(); 
double result = availableBlocks * blockSize; 

free = (Preference)this.findPreference("free_mem"); 
free.setSummary(Double.toString(result)+" GB"); 

问题是我得到一个输出为5.654707363。我试图只使用第一个小数位

free = Math.round(size * 10)/10d; 

但是不起作用。有任何想法吗?

+0

“它不起作用”永远不会给你一个答案:你必须指定实际结果是什么,以及为什么它是意外的。 – jez

回答

4

如果我明白你的问题的权利,你需要NumberFormat这里:

NumberFormat nf = NumberFormat.getInstance(); 
nf.setMaximumFractionDigits(1); 
nf.format(5.654707363); 

产生5,7

0

如果你需要显示的目的,值使用NumberFormat(见答案由亚当·阿诺德) 。

对于数字四舍五入(生产圆润号),使用BigDecimal

double num = 3.141592653589793d; 
double rounded = BigDecimal.valueOf(num).setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); 
0

您是否尝试过使用free = Math.round(free * 10)/10d;代替free = Math.round(size * 10)/10d;?我没有看到size作为定义的变量。

double free = 5.654707363; 
free = Math.round(free * 10)/10d; 
System.out.println(free); 

输出5.7的简单测试。

+0

是的,我试过 double result = availableBlocks * blockSize; result = Math.round(result * 10)/ 10d; 但不起作用...输出总是5.654707363 –