我正在通过串行端口从我的 Arduino 获取一些值。数据具有以下格式:
"value1,value2,value3\r"
作为 string
。
示例:"4.5,550.0,0.02\r"
我可以接收并分隔这些值,但是当我尝试将它们转换为 double
时,出现以下异常
"input string was not in a correct format"`.
double Battery = 0, Voltage = 0, Current = 0;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
string data = serialPort1.ReadLine();
string bv = data.Substring(0, data.IndexOf(",") - 1);
data = data.Substring(data.IndexOf(",") + 1);
string v0 = data.Substring(0, data.IndexOf(",") - 1);
data = data.Substring(data.IndexOf(",") + 1);
string i = data;
double batteryVoltage = Convert.ToDouble(bv);
double V0 = Convert.ToDouble(v0);
double I = Convert.ToDouble(i);
Battery = batteryVoltage;
Voltage = V0;
Current = I;
}
最佳答案
这里有两个问题。首先,由于区域设置(无效的小数点字符),转换可能会失败,因此使用 System.Globalization
命名空间中的 CultureInfo.InvariantCulture
作为附加参数。第二,您要从子字符串中删除一个字符,因此删除 -1
。
string data = "4.5,550.0,0.02\r";
string bv = data.Substring(0, data.IndexOf(","));
data = data.Substring(data.IndexOf(",") + 1);
string v0 = data.Substring(0, data.IndexOf(","));
data = data.Substring(data.IndexOf(",") + 1);
string i = data;
double batteryVoltage = Convert.ToDouble(bv, CultureInfo.InvariantCulture);
double V0 = Convert.ToDouble(v0, CultureInfo.InvariantCulture);
double I = Convert.ToDouble(i, CultureInfo.InvariantCulture);
关于c# - 将字符串转换为 double : input string was not in a correct format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18868848/