簡體   English   中英

使用 DecimalFormat 格式化數字

[英]Formatting numbers using 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

這兩種格式略有不同。 “#.##”表示將打印最多兩位小數,而“#.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

這似乎不能由單個formatter解決。 我建議您使用"0.00"格式並將".00"替換為空字符串。

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

我認為這是不可能的,至少對於 Java SE 格式化程序來說是不可能的。 您需要制作自定義格式化程序。 我會這樣做

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

改用 BigDecimal 數字類:

例如,如果 n 是 BigDecimal,那么您可以使用

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

順便說一下,最好的做法是在處理金錢時使用 BigDecimal。

您可以嘗試:

DecimalFormat df = new DecimalFormat("#.##",new DecimalFormatSymbols(Locale.US));
System.out.println(new java.text.DecimalFormat("#.##").format(5.00));

這將打印 5

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

這將打印 500.40

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM