force a string to 2 decimal places

2019-01-25 02:49发布

问题:

i have a repeater item that displays a double. occasionally the double seems to be coming out with 3 decimal places like this 1165.833. im trying to force it to two decimal places by wrapping it in a string.format method but it still comes out the same:

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

any ideas why?

回答1:

String simply does not implement IFormattable. To use the formatting, remove .ToString() so that you aren't passing in a String.

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

To see this more explicitly, run this code:

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

which outputs

123.888
123.89


回答2:

You can use:

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


回答3:

Based on MSDN, you should be able to express the format mask within the call to DataBinder.Eval.
http://msdn.microsoft.com/en-us/library/2d76z3ck%28VS.90%29.aspx

So essentially you should be able to do this - and force only 2 decimal places to show:

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


回答4:

Try not calling ToString() on the output of the Eval method - you can't format a string with number formatting strings.



回答5:

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

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