# 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....

###### Who is Participating?

Commented:
System.Data.DataTable FTable =
new System.Data.DataTable();
for(int i=0;i<4;i++)

//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)
{
}
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 Minute = (Datadouble - Hour)*100;
TotalHr += Hour;
TotalMin += Minute;
}
0

Commented:
Convert to datetime and then Add
0

Author 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

Commented:
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

Author Commented:
sorry but i dont understand the func
can u gix my func that it work plesese ?
0

Commented:
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

Author 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

Commented:
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

Commented:
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.