При правильном подсчёте получаются значения равные 0 - C#
Формулировка задачи:
Здравствуйте, друзья. Мучает очень сильно такой вопрос: В цикле(который я отделил пунктирной линией) происходит подсчет некоторых значений в переменную
j[p]
. Вот сам подсчетj[p] = (q[i]/tests_count)*100, где q[i] = {1,1,2,1} и tests_count = 5;
Как видно, значения все имеются и я каждое значение (q[i], tests_count) выводил отдельно в listbox для проверки, всё так, как описал выше, но при подсчёте, все элементы на выходе(j[p])
равны нулю. Никто не подскажет, что за полтергейст крадет мне мои проценты и как с ним бороться?private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
selected_product = comboBox2.Items[comboBox2.SelectedIndex].ToString();
double tests_count;
double occus_count;
MySqlConnection connect = new MySqlConnection("server=" + server + ";user=" + login + ";database=" + database + ";password=" + password + ";");
MySqlCommand cmd = new MySqlCommand("SELECT COUNT(*) FROM tests WHERE selected_product=" + "'" + selected_product + "'", connect);
MySqlCommand cmd2 = new MySqlCommand("SELECT COUNT(*) FROM occupation", connect);
MySqlCommand cmd3 = new MySqlCommand("SELECT * FROM occupation", connect);
MySqlCommand cmd4 = new MySqlCommand("SELECT selected_occu FROM tests WHERE selected_product=" + "'" + selected_product + "'", connect);
connect.Open();
tests_count = Convert.ToInt32(cmd.ExecuteScalar());
occus_count = Convert.ToInt32(cmd2.ExecuteScalar());
connect.Close();
MySqlDataReader dr;
MySqlDataReader dr2;
MySqlDataReader dr3;
int[] q = new int[Convert.ToInt32(occus_count)];
string[] occus_line = new string[Convert.ToInt32(occus_count)];
string[] tests_line = new string[Convert.ToInt32(tests_count)];
connect.Open();
dr = cmd3.ExecuteReader();
int t = 0;
while (dr.Read())
{
occus_line[t] = dr["occu_pation"].ToString();
t++;
}
connect.Close();
int p = 0;
double[] j = new double[Convert.ToInt32(tests_count)];
string[] s = new string[Convert.ToInt32(tests_count)];
chart2.Series[0].Points.Clear();
//----------------------------------------------------------------------------------------------------------------------------------------
for (int i = 0; i < occus_count; i++)
{
connect.Open();
dr2 = cmd4.ExecuteReader();
while (dr2.Read())
{
if (occus_line[i] == dr2["selected_occu"].ToString())
{
q[i] = q[i] + 1;
}
}
connect.Close();
if (q[i] > 0)
{
MySqlCommand cmd5 = new MySqlCommand("SELECT * FROM occupation WHERE occu_id=" + "'" + (i + 1) + "'", connect);
j[p] = (q[i] / tests_count);
connect.Open();
dr3 = cmd5.ExecuteReader();
while (dr3.Read())
{
s[p] = dr3["occu_pation"].ToString();
}
chart2.Series[0].Points.AddXY(s[p] + " " + Math.Round(j[p]) + " %", Math.Round(j[p]));
listBox1.Items.Add(s[p]);
p++;
connect.Close();
}
}
//----------------------------------------------------------------------------------------------------------------------------------------
}Решение задачи: «При правильном подсчёте получаются значения равные 0»
textual
Листинг программы
j[p] = (double)q[i] / tests_count;