将字符串转换为双精度:输入字符串的格式不正确 [英] Convert string to double: input string was not in a correct format

查看:103
本文介绍了将字符串转换为双精度:输入字符串的格式不正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在通过串行端口从Arduino获得一些值.数据格式为:"value1,value2,value3 \ r" 作为 string .

I am getting some values from my Arduino over the serial port. The data has the format: "value1,value2,value3\r" as a string.

示例:"4.5,550.0,0.02 \ r"

我可以接收和分隔值,但是当我尝试将它们转换为 double 时,出现以下异常

I can recieve and separate the values but when I try to convert them to double I get the following exception

输入字符串的格式不正确".

"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 .

Two things are a problem here. First, the conversion may fail because of regional settings (invalid decimal point character), so use CultureInfo.InvariantCulture from System.Globalization namespace as an additional parameter. Second thing, you are cutting off one character from your substrings, so remove -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);

这篇关于将字符串转换为双精度:输入字符串的格式不正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆