在Java中格式化十进制数字表示法的正确方法,无需除法



我已经在Java中做了关于数字转换的阅读,因为我需要在我的Android应用程序中格式化数字。

我目前持有一个4位数的long变量

long variable_1 = 2203;

这就是我要打印的

220.3

到目前为止我做了什么

variable_1 = 2203;
BigDecimal bd = new BigDecimal(variable_1);
bd = bd.setScale(1, BigDecimal.ROUND_HALF_UP);
txtView_variable_1.setText(String.valueOf(bd));
结果

2203.0

我在这里做错了什么?

如果更改BigDecimal的比例,它将返回具有指定比例但具有相同数值的新BigDecimal。它不会改变未缩放数的解释。底层的缩放数将被重新缩放。

您应该在初始化BigDecimal时给出比例,以便它正确解释未缩放的数字:

long variable_1 = 2203;
BigDecimal bd = new BigDecimal(BigInteger.valueOf(variable_1), 1);
System.out.println(String.valueOf(bd));

输出:

220.3

我在0.1处也遇到了同样的问题我是这样做的:

  private BigDecimal roundBigDecimal(BigDecimal valueToRound) {
    int valeurEntiere = valueToRound.intValue();
    String str = String.valueOf(valeurEntiere);
    int rounding = valeurEntiere == 0 ? 1 : str.length() + 1;
    return new BigDecimal(String.valueOf(valueToRound), new MathContext(rounding, RoundingMode.HALF_UP));
  }

实际上整型的舍入取决于数的位数