Как округлить TimeSpan до одной цифры за миллисекунды

Как я могу округлить, чтобы получить только одну цифру в миллисекундах?

Я попробовал какое-то решение по этой ссылке, но никто не работает: Можете ли вы обойти .NET Объект TimeSpan?

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

person Marcio Miitooo    schedule 27.12.2018    source источник
comment
Также имейте в виду, что TimeSpan всегда имеет точность до 100 наносекунд. Просто потому, что вы его округлили, это не значит, что когда вы, например, напечатайте его, он не будет (обязательно) включать некоторые конечные нули. (Я упоминаю это из-за вашего упоминания ts.ToString())   -  person Damien_The_Unbeliever    schedule 27.12.2018
comment
Возможный дубликат Можно ли округлить объект .NET TimeSpan?   -  person Marcell Toth    schedule 27.12.2018


Ответы (1)


Вы можете округлить до 100 миллисекунд (десятые доли секунды) следующим образом:

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));
person marsze    schedule 27.12.2018