输入字符串格式不正确

本文关键字:不正确 格式 字符串 输入 | 更新日期: 2023-09-27 18:08:50

我的代码中出现以下错误:"输入字符串格式不正确"。

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("##.###");
        }
    }

要全面了解我正在尝试做的事情,请访问以下链接在中继器中选择项目或列并更改数据

输入字符串格式不正确

你根本不需要使用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

Convert.ToDecimal(string)方法显式地使用Decimal.Parse(string, CurrentCulture)。下面是它的实现过程;

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

Decimal.Parse(string, CurrentCulture)方法实现为;

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

可以看到,它使用NumberStyles.Number枚举。这是一个复合样式,可以包含;

  • 前后空白(Char.IsWhiteSpace返回true)
  • 前后标志(CurrentCulturePositiveSignNegativeSign)
  • 十进制分隔符(CurrentCultureNumberDecimalSeparator属性)
  • 千位分隔符(CurrentCultureNumberGroupSeparator属性)

既然你说你的方法与5.33432值失败,很可能你的CurrentCultureNumberDecimalSeparator属性不是.

您可以使用.Clone()方法创建基于CurrentCulture的副本CultureInfo,并将此属性设置为.