2009-09-24 6 views
3

Salutations. Imaginez que vous avez reçu une chaîne de caractères (de quelque part que vous ne pouvez pas contrôler). Dans cette chaîne est un nombre décimal. Vous voulez ajouter des virgules (c'est-à-dire: transformer 1234567.89 en 1.234.567.89) à ce nombre tout en gardant la chaîne entière intacte. Le symbole de devise avant le nombre variera, mais le format de virgule ne doit pas varier selon la culture.Ajout de virgules à un nombre décimal compris dans une chaîne de texte avec .NET 2.0

Existe-t-il un moyen facile de faire cela dans .NET?

S'il n'y a pas un moyen facile, je vais entrer dans plus de détails quant à ce que j'avais prévu de faire. Nous pouvons utiliser string.Substring() pour sortir le nombre car il est toujours entre un texte statique. Par exemple:

Notre chaîne:

string s1 = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah" 

Nous pouvons obtenir au prix comme celui-ci:

int start = s1.IndexOf("Total price: ") + 13; 
int length = s1.IndexOf(";") - start; 
string trim = s1.Substring(start, length); 

Prenez le caractère de monnaie, laisser le reste:

char curr = trim[0]; 
string sAmount = s1.Substring(1, s1.Length); 

maintenant nous pouvons formater notre nombre décimal:

decimal dAmount; 
if (decimal.TryParse(sAmount, out dAmount)) 
{ 
    string formattedPrice = curr + dAmount.ToString("N2"); 
    Console.WriteLine(formattedPrice); 
} 

Maintenant, je pourrais simplement insérer la chaîne résultante dans ma chaîne d'origine où elle devrait aller. Le point d'écrire cette question est que cela me semble très méchant, et j'espérais trouver une meilleure façon de faire face à cela.

Merci pour votre temps. Je vais rafraîchir cela pour la prochaine heure et choisirai une réponse dans ce délai.

Répondre

5
string input = "Blah Blah Blah. Total price: $1234567.89; Blah Blah Blah Blah"; 

string output = Regex.Replace(input, @"\d+(\.\d\d)?", match => decimal.Parse(match.Value).ToString("N")); 
+0

Absolument parfait. Merci! – JoeB

1

La méthode la plus simple consiste à utiliser l'expression régulière pour rechercher et remplacer.

2

Essayez quelque chose comme ceci:

String.Format("Total Price: {0:C}", dAmount); 

edit: désolé, trop de café, lire rapidement. ce qui précède est la réponse à la façon d'insérer un virgule/symbole monétaire dans un nombre.

Pour répondre à la question concernant la réinsertion du nouveau numéro dans l'ancienne chaîne, une expression régulière serait probablement la meilleure pour identifier le numéro dans la chaîne et pour le remplacer après avoir effectué votre mise en forme. Je suppose que je devrais voir plus d'exemples d'imput valide pour aider avec l'expression rationnelle réelle.

2

Vous pouvez regarder l'espace de noms System.Globalization.

Vous peut rogner le début et les caractères de suivi qui ne sont pas des numéros, puis formatez votre chaîne en fonction de votre System.Globalization.CultureInfo.CurrentCulture.NumberFormat etc.

Questions connexes