calc sum of hours problem

calc sum of hours
-------------------------
for exsmple i have 4 rows whit a time diff value :
7.3
7.3
7.3
7.3
its presnt 7 hours + 30 min
the resualt of the sum shold be : 30 hours
i am geting : 28.3
how can i fix that ?
thanks....

Tech_MenAsked:
Who is Participating?
 
Gautham JanardhanConnect With a Mentor Commented:
System.Data.DataTable FTable =
                        new System.Data.DataTable();
                  FTable.Columns.Add("Hours");
                  for(int i=0;i<4;i++)
                        FTable.Rows.Add(new object [] {7.3});

//u can ignore till here it's just to populate data

                  double TotalHr = 0;
                  double TotalMin = 0;
                  foreach(System.Data.DataRow FRow in FTable.Rows)
                  {
                         AddTime(FRow["Hours"],ref TotalHr,ref TotalMin);
                  }
                  TotalHr += Math.Floor(Math.Round(TotalMin,0) /60);
                  TotalHr += ((Math.Round(TotalMin,0)%60)/100);


                  Console.WriteLine(TotalHr.ToString());



            static void AddTime(object Data,ref double TotalHr,ref double TotalMin)
            {
                  double Datadouble = Convert.ToDouble(Data);
                  double Hour = Math.Floor(Datadouble);
                  double Minute = (Datadouble - Hour)*100;
                  TotalHr += Hour;
                  TotalMin += Minute;
            }
0
 
udhayakumardCommented:
Convert to datetime and then Add
0
 
Tech_MenAuthor Commented:
the code :
try
                  {
                        foreach(DataRow row in dsmas.Tables[0].Rows)
                        {
                              decimal num =Decimal.Parse(row["TotalHour"].ToString().IndexOf(".").ToString());
                              if(num == -1)
                              {
                                    resulte=new string[2];
                                    resulte[1]="0";
                                    tempBalance+=Convert.ToInt32(resulte[1]);

                              }
                              else
                              {
                                    resulte = row["TotalHour"].ToString().Split(tav);
                                    tempBalance+=Convert.ToInt32(resulte[1]);
                              }
                              resulte = row["TotalHour"].ToString().Split(tav);
                  
                              countHours+= Convert.ToInt32(resulte[0]);
                              
                              
                              if (tempBalance >= 60)
                              {
                                    countHours++;
                                    tempBalance -= 60;
                              }
                              else
                              {
                              
                                    tempBalance = Convert.ToInt32(resulte[1]);
                              }

                        }
                        string hoursresult = countHours.ToString() + "." + tempBalance.ToString();
                        editBox1.Text = hoursresult.ToString(); // ÜÔÑÙÐ èç Ðê ÔéâÕê
                  }
                  catch
                  {
                  }

where to convert ?
0
Cloud Class® Course: Microsoft Exchange Server

The MCTS: Microsoft Exchange Server 2010 certification validates your skills in supporting the maintenance and administration of the Exchange servers in an enterprise environment. Learn everything you need to know with this course.

 
dkloeckCommented:
that is because you are using floats  (hours do not have 100 minutes)
use:

public float Sum(float time1, float time2)
        {
            float temp = (float)((int)time1 + (int)time2);
            float time1min = time1 - ((int)time1);
            float time2min = time2 - ((int)time2);

            if (time1min + time2min >= 0.6)
                temp += 0.4f + time1min + time2min;
            else
                temp += time1min + time2min;
            return temp;
        }
0
 
Tech_MenAuthor Commented:
sorry but i dont understand the func
can u gix my func that it work plesese ?
0
 
dkloeckCommented:
if you use
public float Sum(float time1, float time2)
        {
            float temp = (float)((int)time1 + (int)time2);
            float time1min = time1 - ((int)time1);
            float time2min = time2 - ((int)time2);

            if (time1min + time2min >= 0.6)
                temp += 0.4f + time1min + time2min;
            else
                temp += time1min + time2min;
            return temp;
        }
to sum.. it will work
0
 
Tech_MenAuthor Commented:
foreach(DataRow row in dsmas.Tables[0].Rows)
                        {
                              decimal num =Decimal.Parse(row["TotalHour"].ToString().IndexOf(".").ToString());
                              if(num == -1)
                              {
                                    resulte=new string[2];
                                    resulte[1]="0";
                                    tempBalance+=Convert.ToInt32(resulte[1]);

                              }
                              else
                              {
                                    resulte = row["TotalHour"].ToString().Split(tav);
                                    tempBalance+=Convert.ToInt32(resulte[1]); // here i get the minutes only for the row from 7.30 i get 3
                              }
                              resulte = row["TotalHour"].ToString().Split(tav);
                  
                              countHours+= Convert.ToInt32(resulte[0]); //here i get the hour only 7 for the row
                              
                              
                              if (tempBalance >= 60)
                              {
                                    countHours++;
                                    tempBalance -= 60;
                              }
                              else
                              {
                              
                                    tempBalance = Convert.ToInt32(resulte[1]);
                              }

                        }
                        string hoursresult = countHours.ToString() + "." + tempBalance.ToString();
                        editBox1.Text = hoursresult.ToString();
0
 
hclgroupCommented:
You could use 2 functions like

        static double ConvertHoursToDecimal(double h1)
        {
            return (int)h1 + ((h1 * 10 % 10) / 6);
        }
// 7.3 will return 7.5

        static double ConvertDecimalToHours(double h1)
        {
            return (int)h1 + ((h1 - (int)h1)*0.6);
        }

// 7.6 will return 7.36
0
 
hclgroupCommented:
convert values first then use normal addition and then you can convert back to your format
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.