2012-04-13 60 views
0
float a= (float) 1846.4; 

NumberFormat df = DecimalFormat.getInstance(); 
df.setMinimumFractionDigits(2); 
df.setMaximumFractionDigits(2); 

float b = Float.parseFloat(df.format(a)); 

什麼是設置爲浮動(我只是想設置可以是2013.43452或2392.2浮點值的2位小數)小數的最佳方式?現在我得到例外,如E xception in thread "main" java.lang.NumberFormatException: For input string: "1,846.40"設置小數位浮點值

+0

爲什麼你需要這些小數位? 'b'也只是'1846.4',格式化+解析只是很奇怪而且完全沒有必要。 – Thomas 2012-04-13 08:19:38

回答

3

我認爲引起NFE的直接問題是字符串中的千位分隔符,而不是小數位數。你在字符串中有一個','和一個'.',並且parseFloat不喜歡那個。

但是請注意,您無法修復float值中的小數位數 - 這完全是格式問題。具體來說,尾隨0在浮點值中沒有意義,因此默認情況下不會顯示。您需要在輸出點根據您的意願格式化該值(當將其轉換爲可顯示String時,例如,像上面那樣使用DecimalFormat)。

+0

我想設置一個浮點數的2個小數位。任何方式來設置傳入值? – kitokid 2012-04-13 08:20:35

+0

@PTY,你不能按照你想要的方式去做 - 看到我的更新。 – 2012-04-13 08:25:23

+0

是的。這將是更好的方法。我不應該嘗試設置小數位,並在需要顯示時使用值。 – kitokid 2012-04-13 08:40:54

0

聽起來像你只是想四捨五入到小數點後兩位。

數字格式和亂用字符串不是你想去的地方。

試試這個:

float b = Math.round(a * 100)/100.0f; 
+2

冒着改變除數的自由,所以你用浮點除法得到一個'float'而不是用整數除法的'long'。 – 2012-04-13 08:30:53

+0

加1。我將在下次使用它。但現在我只是打算在需要顯示時玩這個值。 – kitokid 2012-04-13 08:42:19

+0

這種技術不起作用,超過90%的不可靠性。 '數字格式和字符串'正好*是他想去的地方,否則使用'BigDecimal'。 – EJP 2012-04-13 10:04:48

1

爲了讓您的格式+解析去上班,就再次使用df

float b = df.parse(df.format(a)); 

不過,我還沒有看到在任何意義。你不能定義浮點數的小數位數。 1846.40與1846.4或1846.400相同,後面的零是完全不相關的。

這些數字在您輸出時發揮作用,例如,將該數字寫入一個字符串。但是還有其他的設施可以做到這一點,例如一個字符串格式模式。

如果您需要限制內部使用的小數位數BigDecimal,您可以在其中設置小數點,從而定義它所代表的小數位數。

0

什麼是設置小數位的浮點

沒有一個最好的方法。浮點數不是有小數點位數。他們有二進制的地方。

如果您想要小數位,您必須使用小數位數,即BigDecimalDecimalFormat.format()的結果。