2010-02-01 5 views
7

Y at-il un moyen (.NET) de suppression de zéros d'un certain nombre lors de l'utilisation .ToString("..."), mais pour afficher 2 décimales si le nombre est pas un nombre entier:Affichage zéros sauf si un nombre entier

  1. (12345,00) .ToString (...) devrait afficher en 12345
  2. (12345,10) .ToString (...) devrait afficher comme 12345,10
  3. (12345,12) .ToString (...) devrait afficher en 12345.12

Est il y a 1 chaîne de format de nombre qui fonctionnera dans tous ces scénarios?

.ToString("#.##") œuvres presque, mais ne montre pas la fuite 0 pour le scénario 2 ...

En outre, d'autres cultures ne sont pas un problème, je veux juste un point décimal (pas une virgule, etc.)

+0

'Essayez 0 # 0'?Je n'ai pas essayé cela et je ne suis pas sûr de savoir comment il va réagir dans la situation du nombre entier. –

+0

Il n'y a pas un seul format pour cela. Aussi, que voulez-vous afficher 12345.001 en tant que? 12345.00 (arrondir à 2 décimales parce que ce n'est pas un nombre entier) ou 12345 (le nombre arrondi à 2 décimales est un nombre entier, donc supprimer les zéros de fin)? – Joe

+0

Pour les nombres entiers ceci affiche comme 12345.00 –

Répondre

7

Quelque chose dans ce sens?

  if (number % 1 == 0) 
       Console.WriteLine(string.Format("{0:0}", number)); 
      else 
       Console.WriteLine(string.Format("{0:0.00}", number)); 

EDIT

Il y a un petit bug dans ce code bien :) 1,001 sera imprimé comme « 1.00 » ... ce ne peut pas être ce que vous voulez, si vous avez besoin d'imprimer 1.001 comme " 1 "vous devrez changer le test if (...) pour vérifier une tolérance finie. Comme cette question concerne davantage le formatage, je laisserai la réponse inchangée, mais dans le code de production, vous pourriez envisager ce type de problème.

+0

Pour un code légèrement plus lisible, je préférerais 'String format = (nombre% 1) == 0? "{0: 0}": "{0: 0.00}"; ' –

+0

Oui, je suis parti avec cette initialie mais je pensais que le" long chemin "était plus clair dans le contexte de la réponse à la question. J'utiliserais probablement ton style en vrai code. –

+0

Ce n'est pas tout à fait ce que je cherchais, car je voulais lier directement le numéro sur une page asp.net, et utiliser la chaîne de format pour déterminer comment il est affiché. J'ai, cependant, utilisé cette approche pour ajouter une autre variable à mes liaisons, et se lier à cela (comme une chaîne) à la place. –

0

Je ne peux pas dire que je suis tombé sur un seul masque qui va le faire. J'utiliser

string output = (value % 1 > 0) ? String.Format("{0:0.00}", value) : String.Format("{0:0.##}", value); 
1

pas dans un format, mais il s'intègre en une ligne:

double a = 1.0; 
string format = string.Format((a == (int)a) ? "{0:0}" : "{0:0.00}", a); 
0

Je suppose que vous pourriez faire votre propre méthode pour produire cet affichage, car il est conditionnel à savoir si ou non est un nombre entier.

public static class Extensions 
{ 
    public static string ToCustomString(this decimal d) 
    { 
     int i = (int)d; 
     if (i == d) 
      return i.ToString(); 

     return d.ToString("#.00"); 
    } 
} 
0

Si vous voulez l'utiliser pour afficher la devise, vous pouvez utiliser suivant

float fVal = 1234.20f; 
String strVal = fVal.Tostring("c"); 
0

Vous pouvez écrire une méthode d'extension comme celui-ci pour faire la mise en forme pour vous:

public static string FormatNumberString(this double input) 
    { 
     int temp; 
     string inputString = input.ToString(); 
     return Int32.TryParse(inputString, out temp) ? inputString : input.ToString("0.00"); 
    } 
0

Si vous cherchez à faire cela dans ASP MVC Razor, alors vous pouvez essayer ce

@string.Format(item.DecimalNumber % 1 == 0 ? "{0:0}" : "{0:0.00}", item.DecimalNumber) 

Cela se comportera comme si:

Valeur: 2.5 -> Affichage: 2,50

Valeur: 5 -> Affichage: 5

Valeur: 2,45 -> Affichage: 2,45

2

façon sale:

string.Format("{0:0.00}", number).Replace(".00","") 
+0

Cette approche renvoie 110 pour 11.0 – DoIt

Questions connexes