Solved

# calc sum of hours problem

Posted on 2007-10-02
Medium Priority
394 Views
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....

0
Question by:Tech_Men
• 3
• 2
• 2
• +2

LVL 11

Expert Comment

ID: 19998771
Convert to datetime and then Add
0

Author Comment

ID: 19998830
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

LVL 10

Expert Comment

ID: 19998847
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 Comment

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

LVL 10

Expert Comment

ID: 19999107
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 Comment

ID: 19999160
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

LVL 29

Accepted Solution

Gautham Janardhan earned 2000 total points
ID: 19999195
System.Data.DataTable FTable =
new System.Data.DataTable();
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)
{
}
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

LVL 4

Expert Comment

ID: 19999439
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

LVL 4

Expert Comment

ID: 19999467
convert values first then use normal addition and then you can convert back to your format
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question