2013-11-14 64 views
1

我正在修改以下代碼以格式化雙打:「###,## 0。#########」。它通常以它應該的方式工作,但是當我有一個像「123」這樣的數字時,它將顯示爲「123.0」。在這種情況下,如何避免輸出小數位?我只想要「123」出現。如何不顯示小數位數,除非必要使用DecimalFormat

閱讀Java教程後,似乎應該不會在小數點後面顯示任何內容,因爲格式化字符串中的小數位後面的所有內容都是磅符號,而不是0.但它不是以這種方式表現的。

另外,爲什麼0在那裏的第一位,之前的小數位,在格式化字符串中?

編輯:我的完整代碼如下。我是新十歲上下到這個項目,並仍在試圖弄清楚爲什麼它這樣做:

textField = new TextField("field", Double.class) { 
    public org.apache.wicket.util.convert.IConverter getConverter(
      Class type) { 
     DoubleConverter converter = (DoubleConverter) DoubleConverter.INSTANCE; 
     java.text.NumberFormat numberFormat = converter 
       .getNumberFormat(getLocale()); 
     java.text.DecimalFormat decimalFormat = (java.text.DecimalFormat) numberFormat; 
     decimalFormat.applyPattern("###,##0.#########"); 
     converter.setNumberFormat(getLocale(), 
       decimalFormat); 
     return converter; 
    }; 
}; 
+2

在'DecimalFormat'中使用你的格式化字符串,我得到'double'值作爲'123'而不是'123.0'打印。 – rgettman

+0

@rgettman,你是對的。我只是在我寫的一個單獨的測試程序中測試了相同的東西。但看起來並不是這樣。我粘貼了上面的完整代碼。 –

+0

也許你應該考慮重述問題呢?這似乎是在Wicket代碼中發生的事情,而不是'DecimalFormat'代碼。你有沒有嘗試在'DecimalFormat.format()'中放置一個調試斷點?看看它實際被調用的位置和時間,以及當時的狀態是什麼? – dcsohl

回答

-1

你得到原因的0答案後,是因爲你設置的答案是雙重。雙打被設置爲十進制答案。如果沒有什麼需要小數的答案,它會自動將它放置爲0,因爲小數點後面必須有一些東西。

如果你想在回答後襬脫0,最簡單的方法是將答案改爲一個整數。然而,使用if語句來檢查它是否只有一個0在小數點後面,這將允許您同時具有整數答案和雙重答案。

+0

你測試了你寫的東西嗎?因爲你錯了 - 如果你使用'DecimalFormat'的模式設置爲'###,## 0。#######'並且格式爲'123.0',你將得到'123'。不是'123.0'。 – dcsohl

相關問題