对于以下行:
decimal sec = (decimal)TimeSpan.FromMilliseconds(.8).TotalSeconds;
Run Code Online (Sandbox Code Playgroud)
我期望 sec = 0.0008 ,但它被四舍五入到 3 个小数位并给出结果 0.001 ,任何解决方法。
根据docs,FromMilliseconds四舍五入到最接近的毫秒:
因此, 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 获得。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |