[Java] 格式浮點數n位小數


Answers

看看DecimalFormat 。 你可以很容易地使用它來獲取一個數字並給它一個小數位數。

編輯Example

Question

我需要將浮點數格式化為“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




這是一個不太專業和更昂貴的方式,但它應該更容易理解,對初學者更有幫助。

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;
}



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



下面是使用Nick提到的DecimalFormat類的快速示例。

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

打印語句的輸出將是12.35。 請注意,它會為你整理它。