时间跨度四舍五入到小数点后 3 位

Kes*_*hav 4 .net c# timespan

对于以下行:

decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;
Run Code Online (Sandbox Code Playgroud)

我期望 sec = 0.0008 ,但它被四舍五入到 3 个小数位并给出结果 0.001 ,任何解决方法。

mjw*_*lls 8

根据docsFromMilliseconds四舍五入到最接近的毫秒:

因此, value 只会被认为精确到最接近的毫秒。

请注意,这些文档仅适用于 .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

    }
}
Run Code Online (Sandbox Code Playgroud)

这篇博客文章有关于这个问题的进一步阅读。小提琴可在https://dotnetfiddle.net/YfIFjQ 获得