2009-10-16 14 views
6

Come dovrei convertire il seguente codice C#Qual è l'equivalente C# di 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 Il problema particolare è che io non voglio il separatore decimale a cambiare con Locale (ad esempio alcune versioni locali userebbero '').

+0

sarebbe più facile per noi per aiutare se si menziona il più alto l evel aim. –

+0

Non esiste un equivalente semplice? L'obiettivo reale è quello di assicurarsi che i numeri FP in locali diversi durante la ripetizione '.' come separatore decimale –

risposta

8

Per separatore decimale è possibile impostare in un'istanza NumberFormatInfo e utilizzarlo con ToString:

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

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

per avere il risultato della vostra versione di Java, utilizzare la versione ToString() funzione con Custom Numeric Format Strings (vale a dire: ciò che si chiama pattern):

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

System.Globalization.NumberFormatInfo

3

In C#, decimal numbers sono memorizzati nel tipo decimal, con una rappresentazione interna che consente di eseguire calcoli matematici decimali senza errori di arrotondamento.

Una volta ottenuto il numero, è possibile utilizzare format utilizzando Decimal.ToString() per l'output. Questa formattazione è specifica della locale; rispetta il tuo current culture setting.

+0

Per * controllare * il formato, utilizzare [Decimal.ToString (IFormatProvider)] (https://msdn.microsoft.com/en-us/library/3ebe5aks.aspx) – ToolmakerSteve

Problemi correlati