【问题标题】:Fixed amount of digits after the decimal小数点后固定位数
【发布时间】:2016-02-01 14:53:45
【问题描述】:

我有很多 double 数字来描述不同的对象。

例如:

 Object A
    double a = 10.12
    double b = 10.1223
    double c = 10.12345

 Object B
    double a = 10.12
    double b = 10.1223
    double c = 10.12345

...并且我希望小数点后有固定数量的数字,例如对象 A 必须在小数点后有 5(五)位,而对象 B 必须在小数点后有 2(两位)数字并四舍五入。我想要实现这样的目标:

 Object A
    10.12000
    10.12230
    10.12345

Object B
    10.12
    10.12
    10.12

我尝试setMinimumFractionDigits(5)setMinimumFractionDigits(2),它可以工作,但我有很多对象,首先必须有小数点后一位数,其他需要 5 等。这是一个大项目,是面向对象的。

知道如何实现这一目标吗?

【问题讨论】:

标签: java numbers double decimal


【解决方案1】:

请通过创建DecimalFormat obj 来更改您的代码,并将其用于格式化Double 对象。

private static DecimalFormat fiveDigitFormat= new DecimalFormat(".#####");
private static DecimalFormat twoDigitFormat= new DecimalFormat(".##");

fiveDigitFormat.format(objA);
twoDigitFormat.format(objB);

【讨论】:

    【解决方案2】:

    如评论中所述,请查看DecimalFormat

    对你来说,它看起来像下面这样:

    // For Object A
    DecimalFormat dfForObjA = new DecimalFormat("#.#####");
    dfForObjA.setRoundingMode(RoundingMode.CEILING);
    for (double d : A) {   // Assuming A is already declared and initialized
        System.out.println(dfForObjA.format(d));
    }
    
    // For Object B
    DecimalFormat dfForObjB = new DecimalFormat("#.##");
    dfForObjB.setRoundingMode(RoundingMode.CEILING);
    for (double d : B) {   // Assuming B is already declared and initialized
        System.out.println(dfForObjB.format(d));
    }
    

    注意:对于 for each 循环,我不太确定如何用您的对象完全实现它,因为不清楚它们究竟是什么或它们是如何定义的。

    【讨论】:

      【解决方案3】:

      您也可以简单地使用:

      double a = 10.12;
      double b = 10.1223;
      double c = 10.12345;
      System.out.println(String.format("%.5f", a));
      System.out.println(String.format("%.5f", b));
      System.out.println(String.format("%.2f", c));
      

      打印出来:

      10.12000
      10.12230
      10.12
      

      【讨论】:

        猜你喜欢
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 2016-08-15
        • 1970-01-01
        • 2017-12-31
        相关资源
        最近更新 更多