在 Java 中格式化带小数刻度的数字符号而不除法的正确方法

Correct way to format a notation of a number with decimal scale in Java without dividing

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

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

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

我做错了什么?

我遇到了同样的问题,要四舍五入到 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));
  }

事实上,整数的舍入取决于数字的位数。

如果您更改 BigDecimal 的比例,它将 return 具有指定比例但具有相同数值的新 BigDecimal。它不会改变未缩放数字的解释。基础缩放数字将被重新缩放。

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

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

输出:

220.3