3

我想将 a 转换stringdouble. 我知道,以前有人问过,但让我完成它!:) 所以我从 USB 端口(Arduino 实验)中读取了字符串,我想将该值添加到双精度列表中。价值观不断涌现。问题是,当我尝试将字符串转换为双精度时,它会显示一条错误消息:“传入字符链的格式错误”或类似的内容。我使用 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

4 回答 4

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;
        }
    }
于 2013-08-08T13:12:39.067 回答
2

从评论看来,这是一个数字格式问题。尝试以下操作:

f = Convert.ToDouble(textBox1.Text, new System.Globalization.CultureInfo("en-US"));
于 2013-08-08T15:20:40.233 回答
0

你应该double.TryParse改用。它将解析它是否是双精度数,否则它不会抛出异常。

if(double.TryParse(textBox1.Text,outf))
{
   lista.Add(f);
    i++;
    if (i == lista.Capacity)
    {
        lista.Capacity=lista.Capacity + 100;
    }
}
于 2013-08-08T12:52:54.930 回答
0

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

另一个建议:根据您拥有的双精度数,例如,如果它是一个非常长的双精度数,您可能希望在转换之前或之后将值格式化为只取几位数。

于 2013-08-08T12:55:28.227 回答