happysmile
happysmile

Reputation: 7777

How to Round to the Nearest 0.5?

in my application
Ex 1: Start time 12.30 (-)End time 16.00 here i get the value as 3.7 but i need to show this 3.7 as 3.5 in my application Ex 2: Start time 12.00 (-)End time 16.00 here i get the value as 4.0 here there is no need to alter the value

(1.7,2.7,3.7,4.7,.... etc ) as to be represented as(1.5,2.5,3.5,4.5,.. etc )

so how to write an function for this where if the vale contains(1.7,2.7) i should change to 1.5,2.5 or if it contains 1.0,2.0 then there is no need to replace any value?

Upvotes: 2

Views: 5883

Answers (10)

happysmile
happysmile

Reputation: 7777

string i = "2.0";
if (i == "2.3" || i == "3.3" || i == "4.3")
    {
        string strReplace = i.Replace(".3", ".5");

    }
    else 
    {
        string strReplace = i;
    }

Upvotes: -6

Alfred Myers
Alfred Myers

Reputation: 6453

You should use TimeSpan and round it off:


TimeSpan startTime = new TimeSpan(12, 30, 0);
TimeSpan endTime = new TimeSpan(16, 0, 0);
TimeSpan span = endTime - startTime;
double totalHours = span.TotalHours;
double roundedToHalf = Math.Round(totalHours * 2) / 2;
Console.WriteLine(roundedToHalf);

UPDATE:

If the start and end time are from different dates, you should use DateTime for startTime and endTime.

Upvotes: 1

Bhaskar
Bhaskar

Reputation: 10691

You can use the C# Floor and Ceil method of the Math Class. Read more about it in the below URLs:

http://msdn.microsoft.com/en-us/library/system.math.ceiling(VS.71).aspx http://dotnetperls.com/math-floor

Upvotes: 0

ZombieSheep
ZombieSheep

Reputation: 29963

Times are not integers or floats. You can't work with them as if they are - you wouldn't try to do integer math using the String class, would you?

DateTime and TimeSpan are you friends for this kind of data manipulation.

Upvotes: 0

šljaker
šljaker

Reputation: 7374

Multiply hours with 60 and add minutes. You'll get total number of minutes.
12hours and 30 minutes = 720 + 30 = 750 minutes.
16 hours = 960 minutes.
Subtract the first value from the other and divide it by 60
(960 - 750) / 60 = 210 / 60 = 3.5

Upvotes: 1

Vitaliy Ulantikov
Vitaliy Ulantikov

Reputation: 10534

Use DateTime type to work with time. Example:

string time1 = "12:30";
string time2 = "16:00";
TimeSpan diff = DateTime.Parse(time2)-DateTime.Parse(time2);
string diffString = diff.ToString("hh:mm"); // will be 03:30

Upvotes: 3

AnthonyWJones
AnthonyWJones

Reputation: 189555

Use the DateTime type. Subtracting DateTime types returns a TimeSpan. Use TimeSpan.TotalHours to get your result. E.g.:-

var x = DateTime.Parse("12:30");
var y = DateTime.Parse("16:00");

Console.WriteLine((y - x).TotalHours);

Upvotes: 3

Tikeb
Tikeb

Reputation: 1068

Have the times as DateTime then use Timspan to find the difference between the two times?

Upvotes: 0

pavium
pavium

Reputation: 15138

If the values in your question represent times you can't do decimal arithmetic with them and expect time values as results.

You need to manipulate the values as times

I don't know C#, but it must have some time functions.

Upvotes: 0

Noldorin
Noldorin

Reputation: 147471

This extension method ought to do the job:

public decimal RoundToNearestHalf(this decimal value)
{
    return Math.Round(value * 2) / 2;
}

var num1 = (3.7).RoundToNearestHalf(); // 3.5
var num1 = (4.0).RoundToNearestHalf(); // 4.0

I've used the decimal type in the code because it seems you want to maintain base 10 precision. If you don't, then float/double would do just as well, of course.

Upvotes: 16

Related Questions