字符串不能转换为双精度

时间:2019-02-28 22:54:34

标签: c# string type-conversion double

我有一个奇怪的问题。我首先显示出现在sortLIST函数中的错误,这似乎很奇怪。如在调试错误中看到的,字符串“ i”出现问题,以“,”分隔。 第一个参数是0.48,它是一个两倍。无论如何,错误提示:

输入字符串的格式不正确

我也尝试过删除CultureInfo(“ en-Us”)行,但没有成功:

enter image description here

现在我已经尝试模拟上述内容,并在按钮控件中执行此代码,在这里它确实起作用并且没有错误:

private void button1_Click(object sender, EventArgs e)
{
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
    double test = double.Parse(i.Split(',')[0]);

    MessageBox.Show(test.ToString());
}

什么会导致此错误?为了安全起见,我将以下行放在应用程序的所有功能中:

System.Threading.Thread.CurrentThread.CurrentCulture =
    new System.Globalization.CultureInfo("en-US");

1 个答案:

答案 0 :(得分:4)

您上传的图像显示您实际上正在运行多个线程,但是仅针对当前线程设置区域性。

要解决此问题,您可以将所需的区域性分配给变量,然后在Task.Factory.StartNew中使用它。您可以执行以下操作:

var culture = new System.Globalization.CultureInfo("en-US");
return Task.Factory.StartNew(() => 
{
    // use culture here
    Thread.CurrentThread.CurrentCulture = culture;

    // your actual code here
    String i = "0.48,trx/btc,coss,hitbtc2,0.0000062000 / 0.0000066000,0.0000061502 / 0.0000061701,,0.48%";
    double test = double.Parse(i.Split(',')[0]);
});

正如@madreflection指出的那样,您可以将所需的区域性传递给double.Parse()方法:

// put this at the top of your file
var culture = new System.Globalization.CultureInfo("en-US");

// use this inside Task.Factory.StartNew
double test = double.Parse(i.Split(',')[0], culture);

或者甚至在CultureInfo.InvariantCulture内使用Task.Factory(感谢@Olivier):

double test = double.Parse(i.Split(',')[0], CultureInfo.InvariantCulture);