输入字符串格式不正确错误C#ASP.NET

时间:2014-06-16 08:21:04

标签: c# asp.net visual-studio-2012

我的代码出现以下错误:“输入字符串格式不正确”。在以下一行:

Convert.ToDecimal(tdprice.InnerText).ToString("##.###");

在代码块中:

protected void rptConsole_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            HtmlTableCell tdprice = e.Item.FindControl("price") as HtmlTableCell;
            tdprice.InnerText = Convert.ToDecimal(tdprice.InnerText).ToString("##.###");
        }
    }

要全面了解我要尝试的内容,请访问以下链接Selecting an Item or column in a Repeater and changing the Data

2 个答案:

答案 0 :(得分:1)

Convert.ToDecimal(string)方法明确使用Decimal.Parse(string, CurrentCulture)。这是怎样的implemented;

public static decimal ToDecimal(String value)
{
    if (value == null)
        return 0m;
    return Decimal.Parse(value, CultureInfo.CurrentCulture);
}

Decimal.Parse(string, CurrentCulture)方法implemented as;

public static Decimal Parse(String s, IFormatProvider provider)
{
    return Number.ParseDecimal(s, NumberStyles.Number, NumberFormatInfo.GetInstance(provider));
}

如您所见,它使用NumberStyles.Number枚举。这是一个复合样式,可以包含;

  • 前导和尾随空格(Char.IsWhiteSpace返回true
  • 引导和尾随的标志(CurrentCulture的{​​{3}}和PositiveSign
  • 小数分隔符(CurrentCulture的{​​{3}}属性)
  • 千位分隔符(CurrentCulture的{​​{3}}属性)

由于您说您的方法失败且值为5.33432,因此您的CurrentCulture NegativeSign属性很可能不是.

您可以使用NumberDecimalSeparator根据CurrentCulture创建副本NumberGroupSeparator,并将此属性设置为.

答案 1 :(得分:1)

您根本不需要使用OnItemDataBound事件。

你可以在ASP标记中这样做:

...
<td align="center"><%# String.Format("{0:F2}", Eval("[price]")) %></td>
...

或者如果您想使用.NET货币格式:

...
<td align="center"><%# String.Format("{0:C}", Eval("[price]")) %></td>
...

查看本文以获取有关.NET标准数字格式字符串的更多具体信息:http://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx