web-dev-qa-db-fra.com

forcer une chaîne à 2 décimales

j'ai un élément répéteur qui affiche un double. de temps en temps le double semble sortir avec 3 décimales comme celui-ci 1165.833. im essayant de le forcer à deux décimales en l'enveloppant dans une méthode string.format mais il sort toujours le même:

<%# String.Format("{0:f2}",DataBinder.Eval(Container.DataItem, "pricerange").ToString())%>

des idées pourquoi?

23
phili

String n'implémente tout simplement pas IFormattable. Pour utiliser la mise en forme, supprimez .ToString () afin de ne pas passer de chaîne.

<%# String.Format("{0:f2}",DataBinder.Eval(Container.DataItem, "pricerange"))%>

Pour voir cela plus explicitement, exécutez ce code:

Console.WriteLine(string.Format("{0:f2}", "123.888"));
Console.WriteLine(string.Format("{0:f2}", 123.888));

qui sort

123.888
123.89
63
David Ruttka

Vous pouvez utiliser:

String.Format("{0:0.00}",value);
14

Basé sur MSDN, vous devriez pouvoir exprimer le masque de format dans l'appel à DataBinder.Eval.
http://msdn.Microsoft.com/en-us/library/2d76z3ck%28VS.90%29.aspx

Donc, essentiellement, vous devriez pouvoir le faire - et ne forcer que 2 décimales à afficher:

<%# DataBinder.Eval(Container.DataItem, "pricerange", "{0:##0.00}")%>
8
code4life

Essayez de ne pas appeler ToString() sur la sortie de la méthode Eval - vous ne pouvez pas formater une chaîne avec des chaînes de formatage numérique.

3
Femaref

simple: DataBinder.Eval(Container.DataItem, "pricerange").ToString("C2")

plus @ http://msdn.Microsoft.com/pt-br/library/dwhawy9k (v = vs.110) .aspx # CFormatString

0
Rodrigo Reis