基本上我设定了用户可以使用的小时数限制。现在,每当按下按钮时,无论何时累积的人都会从这个总价值中被拿走。
但是因为限制将表示为156小时,而5分钟的日期时间表示为00.05,结果将为155.95,而不是155.55。
我这样做是
string date2 = TotalMonthlyHours.ToString("HH.mm");
double date = double.Parse(date2);
RunningTotal = date + RunningTotal;
Total = limit - RunningTotal;
有什么想法吗?
答案 0 :(得分:4)
我认为你试图代表5分钟为0.05。这样做的方法是首先将分钟作为整数获得。然后简单地转换为双倍。
double floatmins = minutes/100.0;
你转向另一个方向:
int minutes = (int) (floatmins*100.0);
但是,我强烈建议你不要再这样做了。你不能指望对这样的数量进行算术运算。 2.20-1.50的结果是什么?你和我知道这是30分钟,但计算机说0.70这完全没用。
使用真正的小数表示存储小时数。所以5分钟是5/60.0
。或者将总分钟存储为整数。或者整数的总秒数。或TimeSpan
。
关键是你可以编写自己的帮助程序,从一个理智的存储格式转换为人类可读的值。但是您必须将原始数据存储在允许算术运算的表示中。
答案 1 :(得分:0)
我想通过做这样的事情来解决这个问题
string[] times = date.ToString().Split('.');
if (date != 0.0)
{
string minutesString = times[1];
string hoursString = times[0];
double minutes = Convert.ToDouble(minutesString);
double hours = Convert.ToDouble(hoursString);
// end of splitting
TimeSpan Limit = TimeSpan.FromHours(limit);
TimeSpan Hours = TimeSpan.FromHours((int)hours);
TimeSpan Minutes = TimeSpan.FromMinutes((int)minutes);
TimeSpan SubTotal = Hours + Minutes;
Time = Limit - SubTotal;
}
编辑:很高兴你和我一样想出来,只要看完你的回复大卫,让我们希望它有效
答案 2 :(得分:0)
我会先将它转换为分钟,而不是将日期添加到日期
var min = Convert.ToDouble(Convert.ToDecimal(textbox.Text) * 60);
DateTimePickerEnd.DbSelectedDate = e.NewDate.Value.AddMinutes(min);