在我的申请中 例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那么就没有必要替换任何值?
答案 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;
}