我需要格式化一个浮点数到小数点后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

.


当前回答

值得注意的是,不鼓励使用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));

其他回答

试试这个,这对我帮助很大

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

结果将是 roundfinalPrice—> 5652.26

看看DecimalFormat。您可以很容易地使用它来取一个数,并给它设置一组小数点后的位数。

编辑:示例

下面是一个使用Nick提到的DecimalFormat类的快速示例。

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

打印语句的输出将是12.35。注意,它会把它圈起来。

值得注意的是,不鼓励使用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));

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

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