Question

Est-ce que quelqu'un sait comment obtenir une chaîne de format à utiliser banquiers arrondissant ? J'ai utilisé " {0: c} " mais cela ne correspond pas à celui des banquiers. Math.Round () méthode arrondit les banquiers. J'ai juste besoin de pouvoir dupliquer le résultat à l'aide d'une chaîne de formatage.

Remarque: la question initiale était plutôt trompeuse et les réponses mentionnant des expressions rationnelles en découlent.

Était-ce utile?

La solution

Ne pouvez-vous pas simplement appeler Math.Round () sur l'entrée de chaîne pour obtenir le comportement souhaité?

Au lieu de:

string s = string.Format("{0:c}", 12345.6789);

Faites:

string s = string.Format("{0:c}", Math.Round(12345.6789));

Autres conseils

Regexp est un langage de correspondance de modèle. Vous ne pouvez pas faire d’opérations arithmétiques dans Regexp.

Faites des expériences avec IFormatProvider et ICustomFormatter. Voici un lien qui pourrait vous diriger dans la bonne direction. http://codebetter.com/blogs/david. hayden / archive / 2006/03/12 / 140732.aspx

Ce n’est pas possible, une expression régulière n’a aucun concept de "nombres". Vous pouvez utiliser un évaluateur de match mais vous ajouteriez un code c # impératif et vous écarteriez de votre seule exigence regex.

.Net intègre un support pour l’arrondi arithmétique et bancaire:

//midpoint always goes 'up': 2.5 -> 3
Math.Round( input, MidpointRounding.AwayFromZero );

//midpoint always goes to nearest even: 2.5 -> 2, 5.5 -> 6
//aka bankers' rounding
Math.Round( input, MidpointRounding.ToEven );

" même " L’arrondi est en fait la valeur par défaut, même si " loin de zéro " est ce que vous avez appris à l'école.

En effet, sous le capot, les processeurs informatiques effectuent également l'arrondi des banquiers.

//defaults to banker's
Math.Round( input );

J'aurais pensé que toute chaîne de format d'arrondi serait définie par défaut sur l'arrondi des banquiers, n'est-ce pas le cas?

Si vous utilisez .NET 3.5, vous pouvez définir une méthode d'extension pour vous aider à faire cela:

public static class DoubleExtensions
{
    public static string Format(this double d)
    {
        return String.Format("{0:c}", Math.Round(d));
    }
}

Ensuite, quand vous l'appelez, vous pouvez faire:

12345.6789.Format();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top