对于下面一行:
decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;
我希望sec = 0.0008 ,但它被四舍五入到小数点后3位,并给出结果为0.001 ,任何变通办法。
根据 文献, 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 .