c# - 将字符串转换为 double : input string was not in a correct format

标签 c# string winforms exception double

我正在通过串行端口从我的 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/

相关文章:

c# - 在泛型接口(interface)中实现可空类型

c# - 带有StreamWriter的StreamReader显示性能较低的PowerShell,但File.ReadLines

c# - linq 不会遍历列表

c# - 我如何在 TableLayoutPanel 的特定单元格中放置多个控件

vb.net - 如何在标题栏上放置按钮?

c# - 列表上的 IndexOf 太慢。更快的解决方案?

c# - 如何编写正则表达式以在 C# 中使用正则表达式从字符串中获取子字符串?

ios - 在 swift 中将数组转换为 JSON 字符串

java - 使连接字符串识别为 java 中声明的变量

winforms - 对象定义中的 ^ 是什么?