使用十进制格式设置数字格式

2022-09-02 23:39:15

我正在尝试使用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


答案 1

这两种格式之间略有不同。“#.##”表示它将打印最多两个小数位的数字,而“#.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

答案 2

这似乎不能通过单个.我建议您使用格式并用空字符串替换。formatter"0.00"".00"

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

推荐