2016-05-22 1 views
0

Я хочу прочитать десятичное значение и принять решение, используя его. Если значение больше 0,75, то сохранить дело еще нет. Я разделяю 4/5, а ответ равен 0,8, но переменная хранит 0 вместо 0,8.Ошибка при чтении десятичного значения в коде C#

код класса приведен ниже

float value; 

    List<crime> finalList = new List<crime>(); 
    Dictionary<int,float> finalDictionary = new Dictionary<int,float>(); 


    public float matching() 
    { 
     string crimeType = null; 
     string keys = null; 
     List<crime> keywordsFromOldCrimes = new List<crime>(); 
     List<String> keywordsFromCrimes = new List<string>(); 

     List<string> commonWords = new List<string>(); 
     SqlConnection conn = new SqlConnection(@"Data Source=DELL\SQLEXPRESS;initial catalog=CDMIS;integrated security=True;MultipleActiveResultSets=true;"); 
     SqlCommand commd = new SqlCommand("select * from crime where id=0 ", conn); 
     SqlCommand commd1 = new SqlCommand("select * from crime", conn); 
     SqlCommand commd2 = new SqlCommand("select crime.id , crime.crimeType, crime.keywords from crime inner join FIR on crime.FIRid= FIR.id where FIR.incidentDate in (select from FIR where datepart(yy, incidentDate)>2015)", conn); 
     SqlCommand com3 = new SqlCommand("select * from crime where crimedate >= '2015-01-01'",conn); 
     SqlDataReader read1; 
     SqlDataReader read2; 
     try 
     { 
      conn.Open(); 
      read1 = commd.ExecuteReader(); 
      while (read1.Read()) 
      { 
       crimeType = read1.GetString(read1.GetOrdinal("crimeType")); 
       keys = read1.GetString(read1.GetOrdinal("keywords")); 
      } 
     } 
     catch (Exception exp) 
     { 
      throw exp; 
     } 

     read1.Close(); 
     List<string> keywords = keys.Split(',').ToList(); 

     // read2 = commd2.ExecuteReader(); 
     //while (read2.Read()) 
     //{ 
     // keywords.Add(new crime() 
     // { 
     //  id = read2.GetInt32(read2.GetOrdinal("id")), 
     //  keywords = read2.GetString(read2.GetOrdinal("keywords")), 
     //  crimeType = read2.GetString(read2.GetOrdinal("crimeType")) 
     // }); 
     //} 
     //read2.Close(); 
     //foreach (var word in keyword) 
     //{ 
     // if (word.keywords == keys) 
     // { 

     // } 
     //} 
     read1 = com3.ExecuteReader(); 
     while (read1.Read()) 
     { 
      keywordsFromOldCrimes.Add(new crime() 
      { 
       id = read1.GetInt32(read1.GetOrdinal("id")), 
       caseStatus = read1.GetString(read1.GetOrdinal("caseStatus")), 
       crimeType = read1.GetString(read1.GetOrdinal("crimeType")), 
       details = read1.GetString(read1.GetOrdinal("details")), 
       keywords = read1.GetString(read1.GetOrdinal("keywords")), 

      }); 
     } 

     foreach (var crime in keywordsFromOldCrimes) 
     { 
      keywordsFromCrimes = crime.keywords.Split(',').ToList(); 
      commonWords = keywords.Intersect(keywordsFromCrimes).ToList(); 
      value = commonWords.Count()/keywords.Count(); 
      Console.Write(value); 
      if (value > 0.75) 
      { 
       finalDictionary.Add(crime.id, value); 
      } 
      else 
      { 
       Console.Write("nothing common"); 
      } 
     } 

     return (value); 
    } 

} 

Проблема заключается в следующем составе:

foreach (var crime in keywordsFromOldCrimes) 
    { 
     keywordsFromCrimes = crime.keywords.Split(',').ToList(); 
     commonWords = keywords.Intersect(keywordsFromCrimes).ToList(); 
     value = commonWords.Count()/keywords.Count(); 
     Console.Write(value); 
     if (value > 0.75) 
     { 
      finalDictionary.Add(crime.id, value); 
     } 
     else 
     { 
      Console.Write("nothing common"); 
     } 
    } 

Согласно данным в моей стоимости базы данных commonWords.count() = 4 и значением keywords.count() = 5, поэтому ответ в переменной «значение» должен быть «0,8», но это «0».

ответ

1

Эта часть

commonWords.Count()/keywords.Count() 

является целочисленное деление, оно должно быть литыми плавать для того, чтобы работать должным образом

commonWords.Count()/(float) keywords.Count() 
+0

Спасибо, это сработало :) –

Смежные вопросы