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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 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
Method 2
You can use:
String.Format("{0:0.00}",value);
Method 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}")%>
Method 4
Try not calling ToString() on the output of the Eval method – you can’t format a string with number formatting strings.
Method 5
simple: DataBinder.Eval(Container.DataItem, "pricerange").ToString("C2")
more @ http://msdn.microsoft.com/pt-br/library/dwhawy9k(v=vs.110).aspx#CFormatString
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0