2009-01-11 36 views
48

我需要爲十進制值格式化爲一個字符串,其中i總是顯示在租賃2位小數和至多4java的小數字符串格式

所以例如

"34.49596" would be "34.4959" 
"49.3" would be "49.30" 

可以在此使用來完成String.format命令?或者有沒有更容易/更好的方式來在java中做到這一點。

回答

64

你想要java.text.DecimalFormat。

DecimalFormat df = new DecimalFormat("0.00##"); 
String result = df.format(34.4959); 
+2

按照相同的例子,你會得到錯誤的結果。你需要爲這個特定的例子使用RoundingMode.DOWN。否則,它使用HALF_EVEN。不,否則。 – 2009-01-12 03:40:04

1

你想java.text.DecimalFormat

3

java.text.NumberFormat可能是你想要的。

37

這裏是一個小的代碼片段,沒有工作:

double a = 34.51234; 

NumberFormat df = DecimalFormat.getInstance(); 
df.setMinimumFractionDigits(2); 
df.setMaximumFractionDigits(4); 
df.setRoundingMode(RoundingMode.DOWN); 

System.out.println(df.format(a)); 
+0

沒有負面影響,但您的代碼在原始海報給出的第一個示例中失敗。需要使用RoundingMode.DOWN,否則它默認使用HALF_EVEN,我想。 – 2009-01-12 03:41:58

+0

感謝您的糾正Adeel – 2009-01-13 08:52:23

1

的NumberFormat和DecimalFormat的肯定是你想要什麼。另外,請注意NumberFormat.setRoundingMode()方法。您可以使用它來控制在格式化過程中應用舍入或截斷的方式。

113

是的,你可以用String.format做到這一點:

String result = String.format("%.2f", 10.0/3.0); 
// result: "3.33" 

result = String.format("%.3f", 2.5); 
// result: "2.500"