【问题标题】:Round number to only first decimal place仅将数字四舍五入到小数点后一位
【发布时间】:2013-11-27 16:04:17
【问题描述】:

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

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;

但不起作用。有什么想法吗?

【问题讨论】:

  • “它不起作用”永远不会给你答案:你必须说明实际结果是什么,以及为什么它出乎意料。

标签: java android xml


【解决方案1】:

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

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

产生5,7

【讨论】:

    【解决方案2】:

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

    对于数字四舍五入(产生四舍五入的数字),使用BigDecimal:

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

    【讨论】:

      【解决方案3】:

      您是否尝试过使用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。

      【讨论】:

      • 是的,我尝试了双重结果 = availableBlocks * blockSize;结果 = Math.round(结果 * 10) / 10d;但不起作用...输出始终为 5.654707363
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多