2011-03-02 22 views
21

tengo un elemento repetidor que muestra un doble. ocasionalmente el doble parece estar saliendo con 3 lugares decimales como este 1165.833. im tratando de forzarlo a dos cifras decimales envolviéndolo en un método string.format pero todavía sale el mismo:forzar una cadena a 2 decimales

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

Cualquier idea por qué?

Respuesta

57

String simplemente no implementa IFormattable. Para usar el formateo, elimine .ToString() para que no esté pasando en una Cadena.

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

Para ver esto más explícitamente, ejecute este código:

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

que da salida a

123.888 
123.89 
+0

Por favor, avísenme por qué en el segundo ejemplo, el resultado es ** 123.89 ** el techo de string.format a ** 123.89 **? Quiero exactamente devolver ** 123.88 **. en este ejemplo de enlace de msdn no es correcto ¿por qué? https://msdn.microsoft.com/en-us/library/75ks3aby%28v=vs.110%29.aspx – Alireza

3

Intente no llamar a ToString() en la salida del método Eval; no puede formatear una cadena con cadenas de formato numérico.

14

que puede utilizar:

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

También puede usar cadenas interpoladas en C# 6+ $ "{myDoubleVar: f2}" –

Cuestiones relacionadas