如果需要,格式化为正好2个小数位

时间:2014-03-18 01:30:05

标签: java format decimal

我需要DecimalFormat或更好的代表Double值(在 Java 中),可能是:

25或25.5

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

我已经有以下格式:

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

如果Double是一个整数,这就完美无缺;我得到了25,000美元的输出。除非值为25,000.5;当我需要将其打印为 $ 25,000.50 时,它会打印$ 25,000.5。问题如docs

中所述
  

#a数字,零显示为缺席

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

我做不到:

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

2 个答案:

答案 0 :(得分:2)

这绝对是一个黑客,但我不知道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));

答案 1 :(得分:0)

如果需要返回十进制格式值,则可以使用

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

}