我想将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;
}
}
答案 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(你的双倍);'如果双重正确,这应该可以解决问题。
另一个建议:取决于你所拥有的双倍,例如,如果它是一个非常长的双倍,你可能想要在转换之前或之后格式化值只需几位数。