Accueil > .Net, C# > [C#] Formatage des nombres et culture

[C#] Formatage des nombres et culture

Depuis quelques temps, je suis sur un projet en phase de recette (depuis mi-octobre, en fait…c’est pas un très gros projet, mais il a été mal spécifié et donc on a plein de choses à refaire…). Et dans les anomalies qui nous étaient retournées, on a eu assez souvent des trucs du type : « changer le format de la date », « ajouter les décimales au montant » avec des variantes du style « le montant doit être sur deux décimales », « mettre trois chiffres après la virgule sur les montants »…

Du coup, j’en ai eu un peu marre de passer sur les différents usercontrol pour modifier encore et encore. J’ai donc remonter qu’il n’y aurait que deux formats de nombre (avec ou sans décimales) et plusieurs formats de date (datetime, date longue, date courte, temps long, temps court). Et je me suis fais une série de classe pour tout gérer.

Mais le format qu’ils m’ont donnés ne correspondait pas au format français : 100.000,000 (au lieu de 100 000,00 en français) et d’autres petites choses du style.
J’ai donc modifié un peu ma classe pour prendre en compte les cultures (de base) et surtout les cultures un peu custom.

En utilisation, ça donne, dans mon Global.asax.cs :

            #region Number Format
            NumberFormatInfo numberFormatInfo = new NumberFormatInfo();
            numberFormatInfo.CurrencyDecimalDigits = 2;
            numberFormatInfo.CurrencyDecimalSeparator = ",";
            numberFormatInfo.CurrencyGroupSeparator = ".";
            numberFormatInfo.CurrencySymbol = "€";
            numberFormatInfo.CurrencyNegativePattern = 5;
            numberFormatInfo.CurrencyPositivePattern = 3;
            numberFormatInfo.NumberDecimalDigits = 3;
            numberFormatInfo.NumberDecimalSeparator = ",";
            numberFormatInfo.NumberGroupSeparator = ".";
            numberFormatInfo.PercentDecimalDigits = 2;
            numberFormatInfo.PercentDecimalSeparator = ",";
            numberFormatInfo.PercentGroupSeparator = ".";
            #endregion

            #region Date Format
            DateTimeFormatInfo dateTimeFormatInfo = new DateTimeFormatInfo();
            dateTimeFormatInfo.FullDateTimePattern = "dddd d MMMM yyyy, HH:mm:ss";
            dateTimeFormatInfo.LongDatePattern = "dddd dd MMMM yyyy";
            dateTimeFormatInfo.LongTimePattern = "HH:mm:ss";
            dateTimeFormatInfo.ShortDatePattern = "dd/MM/yyyy";
            dateTimeFormatInfo.ShortTimePattern = "HH:mm";
            #endregion

            CultureInfo custom = new CultureInfo("fr-fr");
            custom.NumberFormat = numberFormatInfo;
            custom.DateTimeFormat = dateTimeFormatInfo;

            CultureInfoCollection collection = new CultureInfoCollection()
            {
                { "Custom", custom }
            };

            Format.Initialize(String.Empty,
                System.Threading.Thread.CurrentThread.CurrentCulture,
                collection);

Et en utilisation :

Format.Numeric.NumberFormatDecimals(d, "Custom");
//Culture custom : 5.214.564,146
Format.Numeric.NumberFormatDecimals(d)
//Culture par défaut, ici fr-FR (CurrentCulture, définie dans Format.Initialize) : 5 214 564,15
Format.Date.FullDateTime(date);
// Culture par défaut : dimanche 1 janvier 2012 10:00:01
Format.Date.FullDateTime(date, "en-us");
// Culture en-us, ajoutée à la volée dans les cultures gérées : Sunday, January 01, 2012 10:00:01 AM
Format.Date.FullDateTime(date, "Current");
// Culture courante : System.Threading.Thread.CurrentThread.CurrentCulture

La classe peut être trouvée sur Pastbin ! (je sais, j’ai tout mit en vrac, mais bon ^^)

Catégories :.Net, C#
  1. Aucun commentaire pour l’instant.
  1. No trackbacks yet.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :