如何绕到最近的0.5?

时间:2009-09-07 12:33:13

标签: c# .net

在我的申请中  例1:开始时间12.30    ( - )结束时间16.00这里我得到的值为3.7,但我需要在我的应用程序中将此3.7显示为3.5  例2:开始时间12.00    ( - )结束时间16.00这里我得到的值为4.0,这里没有必要改变值

(1.7,2.7,3.7,4.7,......等)表示为(1.5,2.5,3.5,4.5,..等)

那么如何编写一个函数,如果vale包含(1.7,2.7),我应该改为1.5,2.5   或者如果它包含1.0,2.0那么就没有必要替换任何值?

10 个答案:

答案 0 :(得分:16)

这种扩展方法应该做的工作:

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

我在代码中使用了decimal类型,因为它似乎要保持基本10精度。如果不这样做,那么float / double当然也可以做到。

答案 1 :(得分:3)

使用DateTime类型。减去DateTime类型会返回TimeSpan。使用TimeSpan.TotalHours获取结果。 E.g: -

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

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

答案 2 :(得分:3)

使用DateTime类型处理时间。例如:

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

答案 3 :(得分:1)

将小时数乘以60并添加分钟数。您将获得总分钟数 12小时30分钟= 720 + 30 = 750分钟 16小时= 960分钟 从另一个中减去第一个值并除以60
(960 - 750)/ 60 = 210/60 = 3.5

答案 4 :(得分:1)

您应该使用TimeSpan并将其四舍五入:


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);

更新:

如果开始和结束时间来自不同的日期,则应将DateTime用于startTime和endTime。

答案 5 :(得分:0)

如果问题中的值代表,则无法对它们进行十进制算术运算,并将时间值视为结果。

您需要将值操作为

我不知道C#,但它必须有一些时间函数。

答案 6 :(得分:0)

有时间作为DateTime然后使用Timespan来找到两次之间的差异吗?

答案 7 :(得分:0)

时间不是整数或浮点数。你不能像使用它们一样使用它们 - 你不会尝试使用String类进行整数运算,是吗?

DateTime和TimeSpan是您进行此类数据操作的朋友。

答案 8 :(得分:0)

您可以使用Math Class的C#Floor和Ceil方法。请在以下网址中详细了解相关信息:

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

答案 9 :(得分:-6)

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

    }
    else 
    {
        string strReplace = i;
    }