我试图格式使用价格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
这似乎不是由单一来解决formatter
。 我建议你使用"0.00"
格式和替换".00"
一个空字符串。
public static String myFormat(double number) {
DecimalFormat df = new DecimalFormat("0.00");
return df.format(number).replaceAll("\\.00$", "");
}
有这两种格式之间的微小差异。 该“###”是指将打印最大小数点后两位数字,而“#.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
我不认为这是可能的,至少不会与Java SE格式化。 您需要自定义格式。 我会做这样的
String res = df.format(number).replace(".00", "");
使用BigDecimal的数类,而不是:
例如,如果n是一个BigDecimal,那么你可以使用
String s = NumberFormat.getCurrencyInstance().format(n);
顺便说一句,这是用钱而工作时使用BigDecimal的最佳实践。
System.out.println(new java.text.DecimalFormat("#.##").format(5.00));
这将打印5
System.out.println(new java.text.DecimalFormat("#.00").format(500.401));
这将打印500.40