使用DecimalFormat格式化数字

时间:2013-05-16 09:23:25

标签: java decimalformat

我正在尝试使用DecimalFormat格式化价格,但这不适用于所有变体。

DecimalFormat df = new DecimalFormat("0.##")
df.format(7.8)
df.format(85.0)

打印

7.80

85

但“7.79999”格式化为“7.8”,而不是“7.80”。我试过这样做的事情

DecimalFormat df = new DecimalFormat("0.00")

强制两个dp,但是“85.0”被格式化为“85.00”而不是“85”!

是否有捕获所有变体的方法,以便将价格打印为#,##或#。##?例如:

  

5,55,5.55,5.50,500,500.40

6 个答案:

答案 0 :(得分:14)

这两种格式之间略有不同。 “#。##”表示它将打印最多两位小数的数字,而“#.00”表示它将始终显示两位小数,如果小数位数小于2,则将用零替换它们。请参阅下面的示例并输出。

public static final DecimalFormat df1 = new DecimalFormat( "#.##" );
public static final DecimalFormat df2 = new DecimalFormat( "#.00" );

System.out.println(df1.format(7.80));
System.out.println(df1.format(85));
System.out.println(df1.format(85.786));

System.out.println(df2.format(7.80));
System.out.println(df2.format(85));
System.out.println(df2.format(85.786));

输出将是

7.8
85
85.79

7.80
85.00
85.79

答案 1 :(得分:13)

单个formatter似乎无法解决这个问题。我建议您使用"0.00"格式并将".00"替换为空字符串。

public static String myFormat(double number) {
  DecimalFormat df = new DecimalFormat("0.00");
  return df.format(number).replaceAll("\\.00$", "");
}

答案 2 :(得分:4)

我认为这是不可能的,至少不是Java SE格式化程序。您需要制作自定义格式化程序。我会这样做

String res = df.format(number).replace(".00", "");

答案 3 :(得分:3)

改为使用BigDecimal数字类:

e.g。如果n是BigDecimal, 然后你可以使用

String s = NumberFormat.getCurrencyInstance().format(n);

顺便说一句,最好的做法是在使用Money时使用BigDecimal。

答案 4 :(得分:0)

您可以尝试:

DecimalFormat df = new DecimalFormat("#.##",new DecimalFormatSymbols(Locale.US));

答案 5 :(得分:-1)

System.out.println(new java.text.DecimalFormat("#.##").format(5.00));

这将打印5

System.out.println(new java.text.DecimalFormat("#.00").format(500.401));

这将打印500.40