有人偷走了我的一分钟:/

4 c# time timespan

我正在尝试23.40使用以下方法转换以double表示的时间,类似于23小时40分钟的时间:

private TimeSpan DoubleToTimeSpan(double time)
{
    double hour = Math.Floor(time);
    double minute = (time - hour) * 100d;
    TimeSpan ts = new TimeSpan((int)hour, (int)minute, 0);
    return ts;
}
Run Code Online (Sandbox Code Playgroud)

在某些时候进行测试时,23.40例如:

Console.WriteLine(DoubleToTimeSpan(23.40));
Run Code Online (Sandbox Code Playgroud)

它表明23:39:00,整整一分钟都被系统偷走了!我的分钟在哪里?

注意:我知道TimeSpan.FromHours,这对我没有帮助,因为这种方法将分钟视为百分比,因此23.40是23小时和40%的小时,这是23:24:00.

Gab*_*abe 9

由于0.4无法以Double浮点格式精确表示,因此可以得到最近的表示形式,在大小写的情况下(23.4-23)*100可能就是这样39.999999999999858.使用时(int),截断分数,留下39.

你需要舍入而不是截断,所以使用(int)Math.Round(minute).

或者,您可以使用Decimal类型,它可以精确地表示十进制数字23.40.