2009-10-16 8 views
6

Comment pourrais-je convertir le code suivant à C#Quel est l'équivalent C# de 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 Le problème particulier est que je ne veux pas le séparateur décimal à changer avec des paramètres régionaux (par exemple certains environnements linguistiques utiliseraient « »).

+0

Il serait plus facile pour nous d'aider si vous mentionnez le plus l objectif evel. –

+0

N'y a-t-il pas un équivalent simple? Le but réel est de s'assurer que les numéros de FP dans différents lieux tout en retenant '.' comme séparateur décimal –

Répondre

8

Pour séparateur décimal vous pouvez le configurer dans une instance NumberFormatInfo et l'utiliser avec ToString:

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

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

pour avoir le résultat de votre version java, utilisez la version fonction ToString() avec Custom Numeric Format Strings (c.-à-: ce que vous avez appelé motif):

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

System.Globalization.NumberFormatInfo

3

En C#, decimal numbers sont stockés dans le type decimal, avec une représentation interne qui vous permet d'effectuer des calculs décimaux sans arrondir les erreurs.

Une fois que vous avez le numéro, vous pouvez le format en utilisant Decimal.ToString() à des fins de production. Cette mise en forme est spécifique aux paramètres régionaux. il respecte votre current culture setting.

+0

Pour * contrôler * le format, utilisez [Decimal.ToString (IFormatProvider)] (https://msdn.microsoft.com/en-us/library/3ebe5aks.aspx) – ToolmakerSteve