舍入数只到小数点后第一位

我想知道可用的手机内存,所以我写了这段代码。

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"); 

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

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

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

如果我理解你的问题,你需要在这里使用NumberFormat

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

产生5,7

如果您需要显示用途的值,请使用NumberFormat (请参阅Adam Arnold的回答)。

对于数字舍入(生成舍入数字),请使用BigDecimal

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

你尝试过使用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。