force une chaîne à 2 décimales

J'ai un élément répéteur qui affiche un double. parfois, le double semble sortir avec 3 décimales comme ceci 1165.833. j'essaie de le forcer à deux décimales en l'enveloppant dans une chaîne.méthode de format mais il sort toujours le même:

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

Des idées pourquoi?

22
demandé sur Femaref 2011-03-02 17:10:42

5 réponses

String n'implémente tout simplement pas IFormattable. Pour utiliser le formatage, supprimer .ToString () de sorte que vous ne passez pas une 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 génère

123.888
123.89
60
répondu David Ruttka 2011-03-02 14:53:42

Vous pouvez utiliser:

String.Format("{0:0.00}",value);
14
répondu Virtual Web Solutions 2012-11-20 07:44:11

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 être capable de le faire - et forcer seulement 2 décimales pour montrer:

<%# DataBinder.Eval(Container.DataItem, "pricerange", "{0:##0.00}")%>
7
répondu code4life 2011-03-02 14:48:29

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
répondu Femaref 2011-03-02 14:14:20

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

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

0
répondu Rodrigo Reis 2014-09-26 14:38:59