2011-03-02 58 views
21

我有一个中继器项目,显示一个双。有时候这个双倍似乎会出现3个小数位,如1165.833。我尝试通过在的String.Format方法包装它迫使它到小数点后两位,但它仍然散发出来的一样:强制一个字符串到2位小数

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

任何想法,为什么?

回答

57

String根本不执行IFormattable。要使用格式,请移除.ToString(),以便不传入字符串。

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

为了更明确地看到这一点,运行此代码:

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

基于MSDN

123.888 
123.89 
+0

请指教我为什么在第二个例子,结果是** 123.89 ** string.format天花板到** 123.89 **?我想准确返回** 123.88 **。在msdn的这个链接示例中,不正确的是为什么!!? https://msdn.microsoft.com/en-us/library/75ks3aby%28v=vs.110%29.aspx – Alireza 2015-01-26 13:05:40

3

尝试不要在Eval方法的输出上调用ToString() - 您无法使用数字格式字符串格式化字符串。

14

您可以使用:

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

你也可以在c#6+中使用内插字符串 $“{myDoubleVar:f2}” – 2018-01-26 20:00:50

相关问题