我正在尝试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.
由于0.4无法以Double浮点格式精确表示,因此可以得到最近的表示形式,在大小写的情况下(23.4-23)*100可能就是这样39.999999999999858.使用时(int),截断分数,留下39.
你需要舍入而不是截断,所以使用(int)Math.Round(minute).
或者,您可以使用Decimal类型,它可以精确地表示十进制数字23.40.