C# TimeSpan四舍五入到3个十进制位置

C# TimeSpan四舍五入到3个十进制位置,c#,.net,timespan,C#,.net,Timespan,对于以下行: decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds; 我希望sec=0.0008,但它会四舍五入到3个小数点位置,并给出0.001的结果,任何解决方法。根据,从毫秒到最接近的毫秒: 因此,该值仅被视为精确到最接近的值 毫秒 注意:这些文档仅适用于.NET Framework。NET Core 3.x将按照OP希望的那样工作(返回0.0008,与文档相反) 如果您想在.NET 4 .x中工作,请考虑将毫

对于以下行:

decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;
我希望sec=0.0008,但它会四舍五入到3个小数点位置,并给出0.001的结果,任何解决方法。

根据,
从毫秒到最接近的毫秒:

因此,该值仅被视为精确到最接近的值 毫秒

注意:这些文档仅适用于.NET Framework。NET Core 3.x将按照OP希望的那样工作(返回0.0008,与文档相反)

如果您想在.NET 4 .x中工作,请考虑将毫秒乘以10000(<代码> TigkPrimMyListEng/代码>),然后调用<代码> FromTicks < /代码>(或构造函数),而不是<代码> FROMLISCONDS:

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

    }
}
对这个问题有进一步的了解。小提琴可在网上买到