2009-12-14 3 views
2

Je suis en train de formater une décimale de sorte qu'il ne sera pas affiché comme si:C# décimal Mise en forme de requête

14,5 devrait s'affiché comme « 14,50 » 14,50 devrait obtenir affiché comme « 14,50 » 14,05 devrait obtenir affiché comme "14.05" 14.00 devrait être affiché comme "14"

Est-ce possible avec un seul format de chaîne, c'est-à-dire sans formatage conditionnel?

J'ai essayé "0. ##" (ne satisfait pas le premier exemple) et "0.00" (ne satisfait pas le dernier exemple).

Merci.

Répondre

4

Oui. Vous pouvez utiliser le spécificateur de format "G". Pour les exemples, voir la documentation de String.Format.

Par exemple:

decimal value = 14.05m; 
string result = String.Format("{0:G}", value); // "14.05" 

value = 14m; 
result = String.Format("{0:G}", value); // "14" 
+0

oui, mais 14,5 accuserait encore comme 14,5 –

+0

Nice, apprendre quelque chose de nouveau tous les temps. – GrayWizardx

+0

mmm - oui, c'est vrai. Je ne sais pas pourquoi 14,5 ne devrait pas être 14,5, si 14,00 est 14 .... Que l'on pourrait être méchant à gérer sans logique supplémentaire. –

0

Je ne pense pas que vous serez en mesure de le faire sans une sorte de mise en forme conditionnelle, parce que vous voulez que le formatage de faire des choses différentes dans les différents cas.

Si vous vous contenteriez de 14,5 au lieu de 14,50, alors vous seriez OK avec la syntaxe 0. ##, mais je ne vois pas de moyen de le faire.

0

réponse Poursuivons Reed et ajoutez un chèque après:

resultArray = result.Split('.'); 

if (resultArray.Length > 1 && resultArray[1].Length != 2) 
    result = String.Format("{0.00}", value); 

Pas exactement élégant, mais vous obtiendrez le résultat que vous désirez.

Ceci suppose que la personne qui dit qu'elle ne s'applique pas à 14.5 est correcte dans les commentaires.

1

Vous pouvez utiliser quelque chose comme: FormatNumber (VariableToBeFormatted, 2) .Replacer (». 00" , String.Empty)