使用Decimal和Bool

时间:2015-11-04 16:55:41

标签: c# c#-4.0

在下面的语法中,我收到错误

  

mscorlib.dll 中出现' System.FormatException' 类型的例外情况,但未在用户代码中处理
  附加信息:输入字符串的格式不正确

抛出错误的传递值是9.7000
这是我的语法 - 我在引发错误的行上方有一条评论

private void calculate()
{
    var qtys = val(dropdownlist.SelectedItem.Text) + "|" + val(dropdownlist1.SelectedItem.Text) + "|" + val(dropdownlist2.SelectedItem.Text) ;
    var totalitems = dropdownitem.SelectedItem.Text + "|" + dropdownitem1.SelectedItem.Text + "|" + dropdownitem2.SelectedItem.Text + "|" + dropdownitem3.SelectedItem.Text;
    var amounts = dropdownamt.SelectedItem.Value + "|" + dropdownamt1.SelectedItem.Value + "|" + dropdownamt2.SelectedItem.Value + "|" + dropdownamt3.SelectedItem.Value;  
    var totalitems = itemInfo.Split('|');
    var qtys = qty.Split('|');
    var amounts = amount.Split('|');

    for (int i = 0; i < totalitems.Count(); i++)
    {
        if (totalitems[i] != "" && qtys[i] != "" && qtys[i] != "0")
        {
            TotalPrice += Math.Round(val(amounts[i]), 2);
            TotalTax +=  Math.Round(val(amounts[i]) * Convert.ToDecimal(0.07), 2);
        }
    }
}   


private decimal val(string p)
{
    if (p == null)
        return 0;
    else if (p == "")
        return 0;
    //The value of p = 9.7000
    return Convert.ToInt16(p);
}

1 个答案:

答案 0 :(得分:5)

您尝试返回decimal但是正在调用Convert.ToInt16尝试Convert.ToDecimal

另外我建议使用decimal.TryParse,而不是直接用这样的代码调用Convert:

public decimal convert(string p)
{
    decimal result;
    if(decimal.TryParse(p, out result))
        return result;
    else 
        return 0;
}