使用的DecimalFormat格式化数字(Formatting numbers using Dec

2019-09-03 15:02发布

我试图格式使用价格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

Answer 1:

这似乎不是由单一来解决formatter 。 我建议你使用"0.00"格式和替换".00"一个空字符串。

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


Answer 2:

有这两种格式之间的微小差异。 该“###”是指将打印最大小数点后两位数字,而“#.00”意味着它会一直显示两位小数,如果小数位是不到两年,它会用零替换它们。 见下面与输出的例子。

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


Answer 3:

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

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


Answer 4:

使用BigDecimal的数类,而不是:

例如,如果n是一个BigDecimal,那么你可以使用

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

顺便说一句,这是用钱而工作时使用BigDecimal的最佳实践。



Answer 5:

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

这将打印5

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

这将打印500.40



文章来源: Formatting numbers using DecimalFormat