2014-06-30 2 views
2

J'ai trouvé cette question dans StackOverFlow mais elle n'a pas résolu mon problème. How do I format a double to a string and only show decimal digits when necessary?C# Comment formater un double en une chaîne et afficher uniquement des chiffres décimaux lorsque cela est nécessaire?

Weight 

0.500 
18.000 
430.000 

par la solution dans l'URL ci-dessus mon show résultat sous cette forme:

Weight 

0.5 
18 
430 

et mon problème est en chiffres décimaux, je veux montrer des chiffres décimaux à 3 chiffres, comme ceci:

Weight 

0.500 
18 
430 
+1

à une estimation, au lieu des '' # es, vous devez utiliser '000 ' – Sayse

+0

cela ne fonctionne pas.afficher beaucoup 0 après les chiffres – BaHaR

+0

Donc, vous voulez trois décimales quand il n'y a pas trois zéros. Sinon, vous ne voulez pas de décimales? –

Répondre

2

Je pense que vous ne pouvez pas faire ce que vous voulez avec une seule chaîne.Pour tapis().Vous pouvez donc utiliser une clause:

if(weight % 1.0 > 0){ 
    string.Format("{0:0.000}", weight) 
} 
else { 
    string.Format("{0:0}", weight) 
} 

Ou encore mieux:

string.Format(weight % 1.0 > 0 ? "{0:0.000}" : "{0:0}", weight) 

EDIT: Désolé manqué un peu =))

EDIT: Si vous devez résultat au sol vous pouvez utiliser:

string.Format(weight % 1.0 >= 0.001 ? "{0:0.000}" : "{0:0}", weight) 
+0

Est-ce que cela fonctionne pour 0.0001 parce que cela afficherait 0.000 lorsqu'il est affiché à 3dp –

+0

merci pour votre réponse, cela ne fonctionne pas trop :(show 1 au lieu de 0.500 – BaHaR

+0

Correction de ce problème –

3

Vous pouvez utiliser Digit espace réservé# avec Zéro placeholder0 après le point . en format de chaîne.

string num = d % 1 == 0 ? d.ToString(".###") : d.ToString(".000"); 

Digit placeholder

Remplace le signe dièse par le chiffre correspondant si l'on est présent; sinon, aucun chiffre n'apparaît dans la chaîne de résultats.

Zero placeholder

endroits du zéro par le chiffre correspondant si l'on est présent; sinon, zéro apparaît dans la chaîne de résultat.

Cet article msdn Custom Numeric Format Strings explique comment le nombre a pu être formaté.

+0

Il ajoute .000 à toutes les valeurs. Je veux juste ajouter .000 à ses chiffres décimaux – BaHaR

+0

Vous avez probablement besoin de cela, d.ToString (". # 00"); – Adil

+0

afficher 0.500 sous cette forme: .500 – BaHaR

0

Vous pouvez utiliser comme ci-dessous la méthode:

Utilisation:

string format1 = GetFormat(123.4567); 
    string format2 = GetFormat(123.45); 
    string format3 = GetFormat(123.0); 
    //format1 = 123.46 
    //format2 = 123.45 
    //format3 = 123 

    private static string GetFormat(double d) 
    {    
     string format; 
     if (d == Convert.ToInt32(d)) 
      format = string.Format("{0:0.##}", d); 
     else 
      format = string.Format("{0:0.00}", d); 

     return format; 
    } 

Pour plus d'informations:

http://csharpexamples.com/c-string-formatting-for-double/

http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8%28v=vs.100%29.aspx

0

J'ai trouvé la solution:

string[] strList = Weight.ToString().Split('.');//or ',' for diffrent regions 
if(strList[1] == "000") 
    str = string.Format("{0:#,0.########}", b); 

merci :)

Questions connexes