如何将TimeSpan四舍五入到一位毫秒

3

如何将毫秒四舍五入为一个数字?

我尝试了这个链接中的一些解决方案,但没有一个可行:Can you round a .NET TimeSpan object?

00:23:01.4999890 -> 00:23:01.5
15:02:02.9999785 -> 15:02:03.0
08:03:59.9605388 -> 08:04:00.0
03:16:00.8605388 -> 03:16:00.9
19:12:01.8420745 -> 19:12:01.8
04:05:03.8417271 -> 04:05:03:8

2
还要记住,TimeSpan 的精度一直到 100 纳秒。仅仅因为你将其舍入,这并不意味着当你打印它时它不会(必要时)仍然包含一些尾部的 0。 (我提到这一点是因为你提到了 ts.ToString())。 - Damien_The_Unbeliever
可能是Can you round a .NET TimeSpan object?的重复问题。 - Marcell Toth
1个回答

5
您可以像这样舍入到100毫秒(1/10秒):

您可以使用如下代码:

var timespan = TimeSpan.Parse("00:23:01.4999890");
var rounded = TimeSpan.FromSeconds(Math.Round(timespan.TotalSeconds, 1));

然后使用自定义格式字符串,仅在小数点后显示1个数字:

rounded.ToString(@"hh\:mm\:ss\.f");
// OUTPUT:
// 00:23:01.5

另一种选择是使用这个答案中的扩展方法:

rounded = timespan.Round(TimeSpan.FromMilliseconds(100));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接