Formater une valeur double comme la devise mais sans le symbole monétaire (C #)

Je donne à une zone de texte une valeur de chaîne indiquant un solde qui doit être formaté comme suit:

###,###,###,##0.00 

Je pourrais utiliser la valeur.ToSsortingng (“c”), mais cela placerait le signe de la monnaie devant.

Une idée de la façon dont je manipulerais la chaîne avant d’alimenter la zone de texte pour obtenir le formatage ci-dessus?

J’ai essayé ceci sans succès:

 Ssortingng.Format("###,###,###,##0.00", currentBalance); 

Merci beaucoup,

 ssortingng forDisplay = currentBalance.ToSsortingng("N2"); 

Si la mise en forme de la devise vous donne exactement ce que vous voulez, NumberFormatInfo un NumberFormatInfo avec et définissez la propriété CurrencySymbol sur “”. Vous devriez bien sûr vérifier que les nombres négatifs sont traités comme vous le souhaitez, bien sûr.

Par exemple:

 using System; using System.Globalization; class Test { static void Main() { NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat; nfi = (NumberFormatInfo) nfi.Clone(); Console.WriteLine(ssortingng.Format(nfi, "{0:c}", 123.45m)); nfi.CurrencySymbol = ""; Console.WriteLine(ssortingng.Format(nfi, "{0:c}", 123.45m)); } } 

L’autre option consiste à utiliser une chaîne de format numérique personnalisée bien sûr – cela dépend si vous voulez vraiment refléter exactement l’apparence d’une devise, sans le symbole, ou contrôler le positionnement exact des chiffres.

As-tu essayé:

 currentBalance.ToSsortingng("#,##0.00"); 

Ceci est l’équivalent à long terme de:

 currentBalance.ToSsortingng("N2"); 

ssortingng result = ssortingng.Format (“{0: N2}”, valeur); // Pour un résultat comme ### ### ##. ##

Vous pouvez le faire avec le séparateur de groupe et le séparateur de section , comme ceci:

 currentBalance.ToSsortingng("#,0.00;(#,0.00)"); 

Cela ne tient pas compte des écarts de culture comme la réponse de @JonSkeet le ferait, mais cela ne correspond pas à la décimale, à l’arrondi, à la séparation des milliers et à la gestion des nombres négatifs.

Demo de violon .NET

 CultureInfo cultureInfo = new CultureInfo("en-US"); cultureInfo.NumberFormat.CurrencySymbol = "Rs."; Thread.CurrentThread.CurrentCulture = cultureInfo; decimal devimalValue = 3.45M; this.Text = devimalValue.ToSsortingng("C2"); //Rs.3.45 

Cela peut être excessif, mais il arrondit, formate …

 @helper TwoDecimalPlaces(decimal? val) { decimal x = 0; decimal y = 0; ssortingng clas = "text-danger"; if (val.HasValue) { x = (decimal)val; if (val > 0) { clas = ""; } } y = System.Math.Round(x, 2); IFormatProvider formatProvider = new System.Globalization.CultureInfo(ssortingng.Empty); @ssortingng.Format("{0:N2}", y) } 

Cette solution simple fonctionne pour moi avec la devise américaine.

Si vous n’avez pas besoin de support de devise internationale, utilisez ceci et remplacez $ par le symbole de devise à supprimer:

 // for USD ssortingng result = currentBalance.ToSsortingng("C").Replace("$", "") 

ou

 // for EUR ssortingng result = currentBalance.ToSsortingng("C").Replace("€", "")