Согласно документы , FromMilliseconds
округляются до ближайшей миллисекунды:
Следовательно, значение будет считаться точным только с точностью до ближайшей миллисекунды.
Обратите внимание, документы правильны только для. NET Framework. . NET Core 3.x будет работать так, как надеялся OP (возвращает 0,0008, в отличие от документов).
Если вы хотите, чтобы это работало в. NET 4.x - рассмотрите возможность умножения миллисекунд на 10 000 (TicksPerMillisecond
), а затем вызовите FromTicks
(или конструктор) вместо FromMilliseconds
:
using System;
public class Program
{
public static void Main()
{
var ticksPerMillisecond = TimeSpan.TicksPerMillisecond;
decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;
decimal sec2 = (decimal)TimeSpan.FromTicks((long)(0.8 * ticksPerMillisecond)).TotalSeconds;
decimal sec3 = (decimal)new TimeSpan((long)(0.8 * ticksPerMillisecond)).TotalSeconds;
Console.WriteLine(sec);
// 0.0008 .NET Core
// 0.001 .NET Framework
Console.WriteLine(sec2);
// 0.0008 .NET Core
// 0.0008 .NET Framework
Console.WriteLine(sec3);
// 0.0008 .NET Core
// 0.0008 .NET Framework
}
}
Этот пост в блоге читается дальше проблема. Скрипка доступна в https://dotnetfiddle.net/YfIFjQ.