Convert.ToDecimal; - 未处理的异常

时间:2016-02-27 15:47:23

标签: c#

我调试程序时出现此错误

  

未处理的类型' System.FormatException'发生在mscorlib.dll

public partial class Form1 : Form
{
     int newCount;
     int oldCount;

     private void timerGetData_Tick(object sender, EventArgs e)
     {
         string u = webBrowser1.DocumentText;
         u = u.Substring(u.IndexOf("<span id=\"PCoins\" class=\"Pcoins\""));
         u = u.Substring(u.IndexOf(">") + 1);
         u = u.Substring(0, u.IndexOf("</span>"));
         textBoxCoins.Text = u;

         newCount = Convert.ToDecimal(u);
         if (newCount <= oldCount)
         {
             textBoxNewCount.Text = "WON";
             oldCount = newCount;
         }
         else
         {
             oldCount = newCount;
             textBoxNewCount.Text = "LOSS";
         }
         timerGetData.Stop();
     }
}

调试停在 newCount = Convert.ToDecimal(u);

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

显然u没有可以转换为十进制的值。您必须跟踪代码以了解原因。

并将变量类型更改为十进制:

 decimal newCount;
 decimal oldCount;

无视

 int newCount;
 int oldCount;

答案 1 :(得分:0)

如果您确定要有一个表示小数有效值的字符串,那么您应该考虑机器的区域设置。如果您未指定CultureInfo参数,则转换要求字符串的格式正确。

如果您的字符串位于840.2449之类的不变文化中,并且您的语言环境设置需要逗号作为小数分隔符,那么您需要指定文化信息

decimal newCount = 0;
string test = "840.2449";
newCount = Convert.ToDecimal(test, CultureInfo.InvariantCulture);
Console.WriteLine(newCount);

当然,您的实际代码永远不会编译,因为您无法将Convert.ToDecimal的返回值分配给integer类型的变量。在我的示例中,我已将变量更改为正确的数据类型。