2009-10-16 162 views
6

如何將我下面的代碼轉換爲C#什麼是Java DecimalFormat的c#等價物?

DecimalFormat form 
String pattern = ""; 
for (int i = 0; i < nPlaces - nDec - 2; i++) { 
     pattern += "#"; 
} 
pattern += "0."; 
for (int i = nPlaces - nDec; i < nPlaces; i++) { 
     pattern += "0"; 
} 
form = (DecimalFormat) NumberFormat.getInstance(); 
DecimalFormatSymbols symbols = form.getDecimalFormatSymbols(); 
symbols.setDecimalSeparator('.'); 
form.setDecimalFormatSymbols(symbols); 
form.setMaximumIntegerDigits(nPlaces - nDec - 1); 
form.applyPattern(pattern); 

編輯的具體問題是,我不希望小數點分隔符與語言環境以改變(例如某些地區會使用「」)。

+0

這將是我們更容易幫助,如果你提到的較高的L evel目標。 – 2009-10-16 08:23:53

+0

沒有簡單的等價物嗎?實際目標是確保在不同地區的FP編號保持'。'作爲十進制分隔符 – 2009-10-16 08:27:50

回答

8

對於小數點分隔符,你可以將其設置在NumberFormatInfo實例並用的ToString使用它:

NumberFormatInfo nfi = new NumberFormatInfo(); 
    nfi.NumberDecimalSeparator = "."; 

    //** test ** 
    NumberFormatInfo nfi = new NumberFormatInfo(); 
    decimal d = 125501.0235648m; 
    nfi.NumberDecimalSeparator = "?"; 
    s = d.ToString(nfi); //--> 125501?0235648 

有你的Java版本的結果,使用ToString()功能版本Custom Numeric Format Strings(即:你叫什麼模式):

s = d.ToString("# ### ##0.0000", nfi);// 1245124587.23  --> 1245 124 587?2300 
             //  24587.235215 -->  24 587?2352 

System.Globalization.NumberFormatInfo

3

在C#中,decimal numbers存儲在decimal類型中,其內部表示允許您在不捨入錯誤的情況下執行小數運算。

一旦你有號碼,你可以format它使用Decimal.ToString()出於輸出的目的。這種格式是特定於語言環境的;它尊重你的current culture setting

+0

要控制格式,請使用[Decimal.ToString(IFormatProvider)](https://msdn.microsoft.com/zh-cn/library/3ebe5aks.aspx) – ToolmakerSteve 2015-09-23 16:26:54

相關問題