首页 文章

将Float格式化为n个小数位

提问于
浏览
201

我需要将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

.

10 回答

  • 4

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

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

    Documentation

  • 2

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

    编辑:Example

  • 13

    试试这个对我帮助很大

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

    结果将是圆形的价格 - > 5652.26

  • 1

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

    这是使用Nick提到的 DecimalFormat 类的快速示例 .

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

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

  • 15

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

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

    可以肯定的是,这并不能实现半均匀的舍入 .

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

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

  • 6
    public static double roundToDouble(float d, int decimalPlace) {
            BigDecimal bd = new BigDecimal(Float.toString(d));
            bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
            return bd.doubleValue();
        }
    
  • 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;
    }
    
  • 1

    我想你想要的是什么

    return value.toString();
    

    并使用返回值来显示 .

    value.floatValue();
    

    将永远返回625.3,因为它主要用于计算某些东西 .

  • 535

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

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

相关问题