2010-10-19 41 views
29

可能重複:
Round a double to 2 significant figures after decimal point格式一倍至小數點後2位與領先的0

我試圖格式的雙精度爲2位小數領先的零和有沒有運氣。 這裏是我的代碼:

Double price = 32.0; 
DecimalFormat decim = new DecimalFormat("#.##"); 
Double price2 = Double.parseDouble(decim.format(price)); 

而且我想輸出爲32.00,而不是我得到32.0
任何解決方案?

+2

由於它看起來像是在處理貨幣,所以請考慮使用'BigDecimal'來表示貨幣。使用浮點數可能會導致舍入問題。 – 2010-10-20 00:22:54

+0

我確定有一百萬個貨幣線索。我更喜歡BigDecimal的整數,然後以便士的方式處理。當然,這不是在這裏也不在那裏...... – 2010-10-20 00:30:00

+0

你的代碼不太正確(例如,你永遠不會顯示你如何獲得輸出)。你可以改變你的程序到一個完整的工作(一個類和一個主要方法),並告訴我們預期的輸出? – TofuBeer 2010-10-20 14:19:43

回答

45

OP想要前導零。如果是這樣的話,那麼按照Tofubeer:

DecimalFormat decim = new DecimalFormat("0.00"); 

編輯:

請記住,我們在這裏討論的格式化數字,而不是數字的內部表示。

Double price = 32.0; 
    DecimalFormat decim = new DecimalFormat("0.00"); 
    Double price2 = Double.parseDouble(decim.format(price)); 
    System.out.println(price2); 

將使用默認格式打印price2。如果您想要打印的格式表示,打印使用格式:

String s = decim.format(price); 
    System.out.println("s is '"+s+"'"); 

有鑑於此,我不認爲你的parseDouble()是做你想要什麼,也不可能。

+0

也試過這個,但仍然不能正常工作 – 2010-10-20 08:47:46

+0

它適用於我,發佈一些示例數據和上面的代碼產生的結果 – 2010-10-20 12:37:54

+0

上面新的代碼 – 2010-10-20 13:27:39

13

試試這個:

DecimalFormat decim = new DecimalFormat("#.00"); 
+0

試過這個,它不工作.. – 2010-10-20 08:47:29

+0

這是如果你已經在雙打工作的答案。我被髮送了一個想法將其轉換爲BigDecimal的想法,但這很簡單並且效果很好。 – ekerner 2013-03-11 16:07:55

+0

它並沒有工作:( – Jorgesys 2018-03-07 23:00:17

相關問題