formater un nombre avec des virgules et des décimales en C# (asp.net MVC3)

j'ai besoin d'afficher un nombre avec des virgules et un point décimal.

par exemple: Cas 1: Le nombre décimal est 432324 (ceci n'a pas de virgule ou de points décimaux) Besoin de l'afficher 432,324.00

mais pas 432,324

cas 2: le nombre décimal est 2222222.22 (ceci n'a pas de virgule) Besoin de l'afficher 2 222 222.22

j'ai essayé ToString("#,##0.##"). Mais Ce n'est Pas la mise en forme

22
demandé sur Krishan 2013-04-16 15:08:40

10 réponses

int number = 1234567890;
Convert.ToDecimal(number).ToString("#,##0.00");

Vous obtiendrez le résultat 1,234,567,890.00.

50
répondu Roys 2013-06-21 10:37:05

peut-être que vous voulez simplement la chaîne de format standard "N", en

number.ToString("N")

il utilisera des milliers de séparateurs, et un nombre fixe de décimales fractionnaires. Le symbole pour les séparateurs de milliers et le symbole pour le point décimal dépendent du fournisseur de format (typiquement CultureInfo) que vous utilisez, tout comme le nombre de décimales (qui sera normalement en 2, comme vous le désirez).

si le fournisseur de format spécifie un nombre différent de décimales, et si vous ne voulez pas changer le format de fournisseur, vous pouvez donner le nombre de décimales après le N, en .ToString("N2").

Edit: La taille des groupes entre les virgules sont régies par le

CultureInfo.CurrentCulture.NumberFormat.NumberGroupSizes

array, étant donné que vous ne spécifiez pas de fournisseur de format spécial.

18
répondu Jeppe Stig Nielsen 2013-04-16 12:00:34

ToString("#,##0.00")

From MSDN

*le spécificateur de format personnalisé " 0 " Sert de symbole de Zero-placeholder. Si la valeur qui est formatée a un chiffre dans la position où le Zéro apparaît dans la chaîne de format, ce chiffre est copié dans la chaîne de résultat; sinon, un zéro apparaît dans la chaîne de résultat. La position du zéro le plus à gauche avant le point décimal et du zéro le plus à droite après le point décimal détermine la gamme des chiffres qui sont toujours présents dans la chaîne de résultat.

le spécificateur " 00 " permet d'arrondir la valeur au chiffre le plus proche précédant la décimale, où l'on utilise toujours l'arrondissement à l'écart du zéro. Par exemple, le formatage 34.5 Avec "00" donnerait la valeur 35.*

7
répondu Patrick D'Souza 2013-04-16 11:21:12

j'ai eu le même problème. Je voulais formater des nombres comme le format "général" dans des tableurs, c'est-à-dire montrer les décimales si elles sont significatives, mais les couper si non. En d'autres termes:

1234.56 => 1,234.56

1234 = > 1,234

il doit supporter un nombre maximum de places après la décimale, mais ne mettez pas de zéros ou de points si ce n'est pas nécessaire, et bien sûr, il doit être adapté à la culture. Je n'ai jamais vraiment compris un moyen propre à faire à l'aide de Chaîne de caractères.Format seul, mais une combinaison de Chaîne.Format et Regex.Remplacez avec un peu de culture de l'aide de NumberFormatInfo.CurrentInfo fait le travail (LinqPad Programme C#).

string FormatNumber<T>(T number, int maxDecimals = 4) {
    return Regex.Replace(String.Format("{0:n" + maxDecimals + "}", number),
                         @"[" + System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator + "]?0+$", "");
}   

void Main(){
    foreach (var test in new[] { 123, 1234, 1234.56, 123456.789, 1234.56789123 } )
        Console.WriteLine(test + " = " + FormatNumber(test));
}

Produit:

123 = 123
1234 = 1,234
1234.56 = 1,234.56
123456.789 = 123,456.789
1234.56789123 = 1,234.5679
5
répondu Wade Hatler 2014-12-21 16:40:16

Pour Rasoir Vue:

$@string.Format("{0:#,0.00}",item.TotalAmount)
5
répondu JoshYates1980 2015-07-22 17:14:45
CultureInfo us = new CultureInfo("en-US");
TotalAmount.ToString("N", us)
4
répondu DarkoM 2013-05-10 14:09:04

votre question n'est pas très claire mais cela devrait vous permettre de réaliser ce que vous tentez de faire:

decimal numericValue = 3494309432324.00m;
string formatted = numericValue.ToString("#,##0.00");

formatted contient: 3,494,309,432,324.00

3
répondu Belogix 2013-04-16 11:20:31

Tout ce qui est nécessaire est un "#0.00", c# fait le reste.

Num.ToString("#,0.00"")

  • "#, 0" formats le séparateur de milliers
  • "0.00" les forces de deux points décimaux
2
répondu Matt Welson 2014-01-20 23:31:16

ToString("#,##0.###")

Produit:

1234.55678 => 1,234.556

1234 = > 1,234

1
répondu Abolfazl Rastgou 2018-02-14 13:42:28
string Mynewcurrency = DisplayIndianCurrency("7743450.00");
        private string DisplayIndianCurrency(string EXruppesformate) 
        { 
        string fare = EXruppesformate;
        decimal parsed = decimal.Parse(fare, CultureInfo.InvariantCulture);
        CultureInfo hindi = new CultureInfo("en-IN");
     // string text = string.Format(hindi, "{0:c}", parsed);if you want <b>Rs 77,43,450.00</b>
    string text = string.Format(hindi, "{0:N}", parsed); //if you want <b>77,43,450.00</b>
      return ruppesformate = text;
    }
0
répondu Sagar Mahajan 2017-05-23 11:42:52