Je nourris une zone de texte une valeur de chaîne me montrant une balance qui doit être formatée comme ceci:
###,###,###,##0.00
Je pourrais utiliser la valeur.ToString ("c"), mais cela placerait le signe de la devise devant.
Avez-vous une idée de la manière dont je manipulerais la chaîne avant d'alimenter la zone de texte pour obtenir le formatage ci-dessus?
J'ai essayé cela sans succès:
String.Format("###,###,###,##0.00", currentBalance);
Merci beaucoup,
string forDisplay = currentBalance.ToString("N2");
Si le format de devise vous donne exactement ce que vous voulez, clonez une NumberFormatInfo
avec et définissez la propriété CurrencySymbol
sur "". Vous devez bien sûr vérifier qu'il gère les nombres négatifs comme vous le souhaitez.
Par exemple:
using System;
using System.Globalization;
class Test
{
static void Main()
{
NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
nfi = (NumberFormatInfo) nfi.Clone();
Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
nfi.CurrencySymbol = "";
Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
}
}
L’autre option consiste bien sûr à utiliser une chaîne de format numérique personnalisée - cela dépend si vous voulez vraiment refléter exactement l’aspect d’une devise, sans le symbole, ou contrôler le positionnement exact des chiffres.
As-tu essayé:
currentBalance.ToString("#,##0.00");
Ceci est l'équivalent main longue de:
currentBalance.ToString("N2");
string result = string.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.ToString("#,0.00;(#,0.00)");
Cela ne tient pas compte des écarts de culture comme le ferait la réponse de @JonSkeet, mais cela imite la décimale, l’arrondi, la séparation des milliers et la gestion des nombres négatifs produits par le format de devise culturelle en-US en utilisant une seule chaîne de format personnalisé.
CultureInfo cultureInfo = new CultureInfo("en-US");
cultureInfo.NumberFormat.CurrencySymbol = "Rs.";
Thread.CurrentThread.CurrentCulture = cultureInfo;
decimal devimalValue = 3.45M;
this.Text = devimalValue.ToString("C2"); //Rs.3.45
Cette solution simple fonctionne pour moi avec la devise américaine.
Si vous n’avez pas besoin du support des devises internationales, utilisez ceci et remplacez le symbole $ par le ou les symboles monétaires à supprimer:
// for USD
string result = currentBalance.ToString("C").Replace("$", "")
ou
// for EUR
string result = currentBalance.ToString("C").Replace("€", "")
C'est peut-être exagéré, mais cela arrondit, formats ...
@helper TwoDecimalPlaces(decimal? val)
{
decimal x = 0;
decimal y = 0;
string 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(string.Empty);
<span class="@clas">@string.Format("{0:N2}", y)</span>
}