TimeSpan四舍五入到小数点后3位。

问题描述 投票:0回答:1

对于下面一行:

decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;

我希望sec = 0.0008 ,但它被四舍五入到小数点后3位,并给出结果为0.001 ,任何变通办法。

c# timespan
1个回答
8
投票

根据 文献, 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

    }
}

本博文 有关于这个问题的进一步解读。Fiddle可在 https:/dotnetfiddle.netYfIFjQ .

© www.soinside.com 2019 - 2024. All rights reserved.