将字符串转换为双倍不工作?

时间:2013-08-08 12:45:00

标签: c# string double

我想将string转换为double。我知道,之前有人问过,但让我完成它! :) 所以我从USB端口读取字符串(Arduino实验),我想将该值添加到双精度列表中。价值观不断涌现。 问题是,当我尝试将字符串转换为double时,它会显示一条错误消息:“传入字符链的格式错误”或类似的内容。我用parse和convert命令得到这个错误消息。 我该怎么办?

以下是应该完成这项工作的代码部分:

namespace voltmeres{
public partial class Form1 : Form
{
    List<double> lista = new List<double>();
    int i;
    double f;
    string POT;
    public Form1()
    {
        InitializeComponent();
        serialPort1.PortName = "COM5";
        serialPort1.BaudRate = 9600;
        lista.Capacity = 100;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen)
        {
            POT =serialPort1.ReadExisting();
                textBox1.Text = POT.ToString();
        }
        f = Convert.ToDouble(textBox1.Text);
        lista.Add(f);
        i++;
        if (i == lista.Capacity)
        {
            lista.Capacity=lista.Capacity + 100;
        }
    }

4 个答案:

答案 0 :(得分:2)

试试这个

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (serialPort1.IsOpen)
        {
            POT = serialPort1.ReadExisting();
            textBox1.Text = POT.ToString();
        }

        if (! double.TryParse(textBox1.Text, NumberStyles.Any, CultureInfo.InvariantCulture, out f)) return;

        f = Convert.ToDouble(textBox1.Text);
        lista.Add(f);
        i++;
        if (i == lista.Capacity)
        {
            lista.Capacity = lista.Capacity + 100;
        }
    }

答案 1 :(得分:1)

从评论中看,这似乎是一个数字格式问题。请尝试以下方法:

f = Convert.ToDouble(textBox1.Text, new System.Globalization.CultureInfo("en-US"));

答案 2 :(得分:0)

您应该使用double.TryParse代替。如果它是double,它将解析,否则它不会抛出异常。

if(double.TryParse(textBox1.Text,outf))
{
   lista.Add(f);
    i++;
    if (i == lista.Capacity)
    {
        lista.Capacity=lista.Capacity + 100;
    }
}

答案 3 :(得分:0)

如果上述答案不起作用,请尝试'String.valueOf(你的双倍);'如果双重正确,这应该可以解决问题。

另一个建议:取决于你所拥有的双倍,例如,如果它是一个非常长的双倍,你可能想要在转换之前或之后格式化值只需几位数。