将双精度转换为有意义的时间

时间:2013-04-12 13:17:29

标签: c# datetime

基本上我设定了用户可以使用的小时数限制。现在,每当按下按钮时,无论何时累积的人都会从这个总价值中被拿走。

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

有什么想法吗?

3 个答案:

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