将Float格式化为n个小数位

时间:2011-03-04 15:36:06

标签: java android floating-point numbers format

我需要将float格式化为“n”个小数位。

正在尝试BigDecimal,但返回值不正确...

public static float Redondear(float pNumero, int pCantidadDecimales) {
    // the function is call with the values Redondear(625.3f, 2)
    BigDecimal value = new BigDecimal(pNumero);
    value = value.setScale(pCantidadDecimales, RoundingMode.HALF_EVEN); // here the value is correct (625.30)
    return value.floatValue(); // but here the values is 625.3
}

我需要返回一个浮点值,其中包含我指定的小数位数。

我需要Float值返回Double

11 个答案:

答案 0 :(得分:544)

您也可以传递浮点值,并使用:

String.format("%.2f", floatValue);

Documentation

答案 1 :(得分:39)

看看DecimalFormat。您可以轻松地使用它来获取一个数字,并给它一组小数位。

编辑Example

答案 2 :(得分:16)

试试这个对我有很大帮助

BigDecimal roundfinalPrice = new BigDecimal(5652.25622f).setScale(2,BigDecimal.ROUND_HALF_UP);

结果将是 roundfinalPrice - > 5652.26

答案 3 :(得分:14)

值得注意的是,不建议使用DecimalFormat构造函数。这个类的javadoc声明:

  

通常,不要直接调用DecimalFormat构造函数,因为NumberFormat工厂方法可能返回除DecimalFormat之外的子类。

https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html

所以你需要做的是(例如):

NumberFormat formatter = NumberFormat.getInstance(Locale.US);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
formatter.setRoundingMode(RoundingMode.HALF_UP); 
Float formatedFloat = new Float(formatter.format(floatValue));

答案 4 :(得分:6)

以下是使用Nick提到的DecimalFormat课程的快速示例。

float f = 12.345f;
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(f));

print语句的输出为12.35。请注意,它将为您舍入。

答案 5 :(得分:4)

有点惊讶没有人指出这样做的直接方法,这很容易。

double roundToDecimalPlaces(double value, int decimalPlaces)
{
      double shift = Math.pow(10,decimalPlaces);
      return Math.round(value*shift)/shift;
}

非常确定这不会做半场甚至四舍五入。

对于它的价值,只要将基于二进制的浮点值与基数为10的算法混合,半偶数舍入就会变得混乱和不可预测。我很确定它无法完成。基本问题是像1.105这样的值不能用浮点表示。浮点值将类​​似于1.105000000000001或1.104999999999999。因此,任何执行半偶数舍入的尝试都会在代表性编码错误上绊倒。

IEEE浮点实现将进行半舍入,但它们执行二进制半舍入,而不是十进制半舍入。所以你可能还可以

答案 6 :(得分:2)

{{1}}

答案 7 :(得分:2)

这是一种更不专业,更昂贵的方式,但它应该更容易理解,对初学者更有帮助。

public static float roundFloat(float F, int roundTo){

    String num = "#########.";

    for (int count = 0; count < roundTo; count++){
        num += "0";
    }

    DecimalFormat df = new DecimalFormat(num);

    df.setRoundingMode(RoundingMode.HALF_UP);

    String S = df.format(F);
    F = Float.parseFloat(S);

    return F;
}

答案 8 :(得分:1)

我认为你想要的是什么

return value.toString();

并使用返回值显示。

value.floatValue();

将始终返回625.3,因为它主要用于计算某些东西。

答案 9 :(得分:1)

我正在寻找这个问题的答案,后来我开发了一种方法! :)一个公平的警告,它将价值四舍五入。

private float limitDigits(float number) {
    return Float.valueOf(String.format(Locale.getDefault(), "%.2f", number));
}

答案 10 :(得分:0)

如果要将数字格式化为字符串,可以使用十进制格式,例如:

String a = "123455";
System.out.println(new 
DecimalFormat(".0").format(Float.valueOf(a)));

此代码的输出将是:

123455.0

您可以在十进制格式中添加更多零,具体取决于所需的输出。