3

stringaを aに変換したいと思いdoubleます。以前にも質問されましたが、最後にさせてください!:)それで、USBポートから文字列を読み取り(Arduinoの実験)、その値をdoubleのリストに追加したいと思います。値は継続的に入ってきます。問題は、文字列を 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

4 に答える 4

2

コメントから、それは数値のフォーマットの問題のようです。次のことを試してください。

f = Convert.ToDouble(textBox1.Text, new System.Globalization.CultureInfo("en-US"));
于 2013-08-08T15:20:40.233 に答える
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 に答える
0

double.TryParse代わりに使用する必要があります。double の場合は解析し、そうでない場合は例外をスローしません。

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 に答える