0

基本上我设置了用户可以使用的时间限制。现在,每次按下按钮时,该人累积的任何时间都会从该总值中扣除。

但是,由于限制将表示为 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;   

有任何想法吗?

4

3 回答 3

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.

关键是您可以编写自己的辅助例程,将合理的存储格式转换为人类可读的值。但是您必须将原始数据存储在允许算术运算的表示中。

于 2013-04-12T13:22:23.297 回答
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;
                    }

编辑:很高兴你想出了和我一样的想法,只需阅读你的回复大卫,希望它有效

于 2013-04-12T14:05:27.760 回答
0

我会先将其转换为分钟,而不是在日期中添加分钟

var min = Convert.ToDouble(Convert.ToDecimal(textbox.Text) * 60);
DateTimePickerEnd.DbSelectedDate = e.NewDate.Value.AddMinutes(min);           
于 2015-10-02T13:25:34.027 回答