在我的C#應用程序中,我從我的MySQL表中讀取數字數據。之後,我正在尋找一個最小的歐幾里得距離(錶行和平均元組之間)。輸入字符串格式不正確,但不知道爲什麼
我正在將MySQL表中的值讀入雙變量(f1
至f8
和一個int
變量)。我在第一行上得到了這個錯誤,我將讀者的結果寫入f1
。但是,當我在讀取我的值後進行隨機計算(例如,f1
+ f8
)時,它會返回正確的結果。那麼爲什麼C#對輸入字符串有問題?
這裏是我的代碼:
for (int k = 1; k <= pocet; k++)
{
string queryCompare = " SELECT F1 AS Fe1, F2 AS Fe2, F3 AS Fe3, F4 AS Fe4, F5 AS Fe5, F6 AS Fe6, F7 AS Fe7, F8 AS Fe8, cluster FROM features WHERE ID=" + k;
MySqlCommand cmdCompare = new MySqlCommand(queryCompare, conect);
readerCompare = cmdCompare.ExecuteReader();
readerCompare.Read();
// MessageBox.Show("OK");
double f1 = Convert.ToDouble(readerCompare["Fe1"].ToString()); // EXCEPTION HERE
double f2 = Convert.ToDouble(readerCompare["Fe2"].ToString());
double f3 = Convert.ToDouble(readerCompare["Fe3"].ToString());
double f4 = Convert.ToDouble(readerCompare["Fe4"].ToString());
double f5 = Convert.ToDouble(readerCompare["Fe5"].ToString());
double f6 = Convert.ToDouble(readerCompare["Fe6"].ToString());
double f7 = Convert.ToDouble(readerCompare["Fe7"].ToString());
string f88 = readerCompare["Fe8"].ToString();
double f8 = Convert.ToDouble(f88, CultureInfo.InvariantCulture);
int cluster = Convert.ToInt32(readerCompare["cluster"].ToString());
readerCompare.Close();
// MessageBox.Show((f1+f8).ToString());
switch (cluster)
{
case 1:
euklDist = (double)Math.Sqrt(
Math.Pow(touple[0, 0] - f1, 2) +
Math.Pow(touple[0, 1] - f2, 2) +
Math.Pow(touple[0, 2] - f3, 2) +
Math.Pow(touple[0, 3] - f4, 2) +
Math.Pow(touple[0, 4] - f5, 2) +
Math.Pow(touple[0, 5] - f6, 2) +
Math.Pow(touple[0, 6] - f7, 2) +
Math.Pow(touple[0, 7] - f8, 2));
if (euklDist < minCl1)
{
minCl1 = euklDist;
idCl1 = k;
}
break;
case 2:
euklDist = (double)Math.Sqrt(
Math.Pow(touple[1, 0] - f1, 2) +
Math.Pow(touple[1, 1] - f2, 2) +
Math.Pow(touple[1, 2] - f3, 2) +
Math.Pow(touple[1, 3] - f4, 2) +
Math.Pow(touple[1, 4] - f5, 2) +
Math.Pow(touple[1, 5] - f6, 2) +
Math.Pow(touple[1, 6] - f7, 2) +
Math.Pow(touple[1, 7] - f8, 2));
if (euklDist < minCl2)
{
minCl2 = euklDist;
idCl2 = k;
}
break;
case 3:
euklDist = (double)Math.Sqrt(
Math.Pow(touple[2, 0] - f1, 2) +
Math.Pow(touple[2, 1] - f2, 2) +
Math.Pow(touple[2, 2] - f3, 2) +
Math.Pow(touple[2, 3] - f4, 2) +
Math.Pow(touple[2, 4] - f5, 2) +
Math.Pow(touple[2, 5] - f6, 2) +
Math.Pow(touple[2, 6] - f7, 2) +
Math.Pow(touple[2, 7] - f8, 2));
if (euklDist < minCl3)
{
minCl3 = euklDist;
idCl3 = k;
}
break;
}
}
記錄在我的數據庫都是這種格式:
- 從F1到F7:
xx,xxx
- F8:
xx.xxx
我知道f8
有小數點而不是逗號,這就是爲什麼我是你唱歌CultureInfo.InvariantCulture
爲f8
。
什麼是'readerCompare [「FE1」]的價值。 ToString()'完全?你的「CurrentCulture」是什麼? –
@SonerGönül在f1欄中,我有大約400個值。以下是前四項:91,08; 399,02; 445,76; 60,57。在列f2,f3,f4,f5,f6,f7中使用相同的格式。我真的不知道爲什麼,但對於F8是這樣的:457.935; 452.72;等等。我目前的文化是sk-SK – user2179427
@ user2179427,它在第一張唱片上失敗了嗎? –