我需要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
特别需要的内容。大多数答案建议使用BigDecimal
或printf
。这是最好的事吗?我不必须使用DecimalFormat
但更喜欢自从我开始使用这条路径(到处都有很多代码已经使用过它)。
Best way to Format a Double value to 2 Decimal places
答案 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 ) );
}