【问题标题】:Formatting Double to exactly 2 Decimal places IF required如果需要,将 Double 格式化为 2 个小数位
【发布时间】:2014-03-18 01:30:04
【问题描述】:

我需要一个 DecimalFormat 或更好的等价物来表示 Double 值(在 Java 中),它可能是:

25 或 25.5

如果它有 any (25.50),我需要将其表示为整数 (25) 或两位小数。这是因为我将其打印为 money

我已经有了以下格式:

DecimalFormat decFormat = new DecimalFormat("##,###.##");

如果Double 是一个整数,这将非常有效;我得到了 25,000 美元的输出。除非该值为 25,000.5;当我需要将其打印为 $25,000.50 时,它会打印 $25,000.5。问题如docs中所述:

#一个数字,零表示不存在

所以基本上最后一个零被去掉了,因为它是可选的。

我做不到:

DecimalFormat decFormat = new DecimalFormat("##,###.#0");

因为那是不允许的。

我怎样才能做到这一点?

注意: 这些问题是相关的,但没有涵盖我对DecimalFormat 的具体需求。大多数答案建议使用BigDecimalprintf。这是最好的做法吗?我不必必须使用DecimalFormat,但我更喜欢使用,因为我已经开始走这条路了(到处都有很多代码已经在使用它)。

Best way to Format a Double value to 2 Decimal places

How do I round a double to two decimal places in Java?

Round a double to 2 decimal places

【问题讨论】:

  • 你试过new DecimalFormat("##,###.00");吗?
  • 是的,这给了我两位小数,无论 Double 是否有一位。即 25000 变成我不想要的 25,000.00

标签: java format decimal


【解决方案1】:

这绝对是一个小技巧,但我不知道DecimalFormat 语法是否允许更好的东西。这只是检查数字是否真实,并根据您要求的规范进行格式设置。

    double number = 25000.5;
    DecimalFormat df;

    if(number%1==0)
         df = new DecimalFormat("##,###");
    else
        df = new DecimalFormat("##,###.00");

    System.out.println(df.format(number));

【讨论】:

    【解决方案2】:

    当您需要返回十进制格式值时,此方法有效

    import java.text.DecimalFormat;
    
    /**
    * @return The weight of this brick in kg.
    */
    public double getWeight()
    {
    
        DecimalFormat df = new DecimalFormat("#.##");
    
        double number = ( getVolume() * WEIGHT_PER_CM3 ) / 1000;
    
        //System.out.println(df.format(number));
    
        return Double.valueOf ( df.format( number ) ); 
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 1970-01-01
      • 2022-09-26
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 2011-09-02
      相关资源
      最近更新 更多