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