2009-04-20 10 views
6

Il semble que String.Format ne sera pas formater une chaîne en entrée. Est-ce que je fais quelque chose de mal, ou est-ce juste un comportement natif?String.Format ne formate pas une chaîne

Entrée: 0,37

Cela ne fonctionne pas.

string x = String.Format("{0:P}", myString) 

Sortie: 0,37

Cela fait.

string x = String.Format("{0:P}", Convert.ToDecimal(myString)) 

Sortie: 37,00%

Répondre

9

Je crois que ce comportement est normal pour 'la mise en forme composite.

Votre premier exemple tente d'appliquer des règles de mise en forme numérique à une chaîne. Votre deuxième exemple tente d'appliquer des règles de formatage numériques à un nombre qui peut avoir des positions décimales.

Voir this article on MSDN pour plus d'informations.

2

L'option de format que vous essayez d'appliquer ne fonctionne que pour les nombres. Il n'y a pas de concept de chaînes intelligentes dans .NET dans lequel le CLR inspecte la chaîne pour un type.

2

Est-ce que je fais quelque chose de mal, ou est-ce juste un comportement natif?

Ce comportement est natif. Il est fondamentalement pas le travail de Format pour interpréter l'entrée de chaîne. Format suppose que l'utilisateur fournit les données correctes - dans votre cas, données numériques. Une chaîne n'est pas numérique, même si représente un nombre (c'est la distinction la plus importante dans CS entre une valeur/sémantique et sa représentation/syntaxe!).

Questions connexes