2009-10-16 3 views
6

Wie würde ich konvertieren den folgenden Code in C#Was ist das C# -Aquivalent von Java DecimalFormat?

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); 

EDIT Das besondere Problem ist, dass ich mit Locale nicht das Dezimaltrennzeichen ändern möchten (z einige Locales verwenden würde ‚‘).

+0

Es wäre leichter für uns, wenn Sie die höhere l erwähnen zu helfen Evel Ziel. –

+0

Gibt es kein einfaches Äquivalent? Das eigentliche Ziel besteht darin, sicherzustellen, dass die FP-Nummern in verschiedenen Gebietsschemas gespeichert werden. Als Dezimaltrennzeichen –

Antwort

8

Für Dezimaltrennzeichens Sie es in einer NumberFormatInfo Instanz festgelegt und es mit ToString verwenden:

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

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

das Ergebnis Ihrer Java-Version zu haben, verwenden Sie die ToString() Funktionsversion mit Custom Numeric Format Strings (dh: was Sie genannt Muster):

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

System.Globalization.NumberFormatInfo

3

In C# sind decimal numbers im Typ decimal gespeichert, mit einer internen Darstellung, die es Ihnen ermöglicht, Dezimalmathematik ohne Rundungsfehler durchzuführen.

Sobald Sie die Nummer haben, können Sie format es für die Ausgabe Decimal.ToString() verwenden. Diese Formatierung ist länderspezifisch; Es respektiert Ihre current culture setting.

+0

Um * das Format * zu steuern, verwenden Sie [Decimal.ToString (IFormatProvider)] (https://msdn.microsoft.com/en-us/library/3ebe5aks.aspx) – ToolmakerSteve