簡體   English   中英

將字符串轉換為double:輸入字符串的格式不正確

[英]Convert string to double: input string was not in a correct format

我通過串口從我的Arduino獲得了一些值。 數據的格式為: "value1,value2,value3\\r"string

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

我可以接收並分離值,但是當我嘗試將它們轉換為double我得到以下異常

“輸入字符串的格式不正確”`。

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);

您的代碼適用於我提供的示例輸入。 你能詳細說明這個例外嗎?

嘗試在轉換中指定CultureInfo。

此外,您應該使用String.Split()方法:

string data = "4.5,550.0,0.02\r";
var strings = data.Split(',');
var doubles = strings.Select(s => Convert.ToDouble(s, CultureInfo.InvariantCulture)).ToList();

double batteryVoltage = doubles[0];
double V0 = doubles[1];
double I = doubles[2];

\\ r \\ n char可能導致問題。 在處理之前嘗試修剪它。

試試這個來分割你的字符串

 string[] separotrs = { ",", "\r" };
 string[] result= aurdino.Split(separotrs, StringSplitOptions.RemoveEmptyEntries);

       double batteryVoltage = Convert.ToDouble(result[1]); //Sorry if order is incorrect:-)
       double v0 = Convert.ToDouble(result[0]);
       double I = Convert.ToDouble(result[2]);

我沒有得到的一件事就是你得到錯誤但是你的方法無法獲取正確的數字(切斷最后一個值),你變量iCurrent )將獲取0.02\\r將由Convert.ToDouble處理你會得到0.02作為你的當前值,但其他值將是錯誤的但我認為你不會在這個方法上得到錯誤。

看這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM