Преобразование двойного в формат времени

Я новичок в программировании на C# ASP.NET MVC

У меня есть класс, который содержит атрибут Credits типа double. Этот атрибут должен быть представлен в моем веб-приложении как формат времени (чч: мм). Так, например, если бы я присвоил Credits значение 2,5, я бы хотел, чтобы он отображал 2:50, 6,15 как 6:15 и т. д. Я знаю, что TimeSpan может преобразовать двойное значение в формат времени, но оно преобразует 2,5 в 2: 30. Есть ли способ легко преобразовать двойной формат в этот формат времени без изменения его типа данных на String? Есть ли какой-то вспомогательный тег атрибута или что-то, что упростило бы эту задачу?

Что вы делаете в таких ситуациях, как 2.75 или 6.31456?

pstrjds 13.09.2018 19:53

Добро пожаловать в Переполнение стека. Используйте инструменты форматирования, чтобы сделать ваше сообщение более читабельным. Используйте code blocking для кода, журнала и текстов ошибок и жирный и курсив для выделения вещей

Morse 13.09.2018 20:03

Также удалите не связанные теги. Это не имеет ничего общего с MVC.

Sach 13.09.2018 20:14
it converts 2.5 to 2:30, как и следовало ожидать, будут преобразованы доли часа. Ваш желаемый результат противоречит общепринятой математике.
Dan Wilson 13.09.2018 20:14
3
4
321
1

Ответы 1

Похоже, что вы хотите разделить целое число и дробную часть, и что вы хотите, чтобы дробная часть была двузначным числом.

Итак, вот как вы получите целую числовую часть в виде int.

var whole = (int)Math.Truncate(value);

И это даст вам дробную часть как int, в данном случае только первые два десятичных знака.

var twoFrac = (int)(((decimal)value % 1) * 100);

Итак, если value был 12.345, то twoFrac оказался бы 34 в int.

Теперь вы можете отображать их как хотите.

И вы можете поместить указанное выше внутри метода, чтобы вы могли получить дробную часть до любого количества десятичных знаков, которое вы хотите, например:

private static int GetFractionalPart(double value, int decimalPlaces)
{
    var factor = (int)Math.Pow(10, decimalPlaces);
    var fractional = (int)(((decimal)value % 1) * factor);
    return fractional;
}

ПРИМЕЧАНИЕ

Однако, как многие другие отмечали в комментариях, это сбивает с толку, и вы даже можете сказать, что делать что-то неправильно, если на самом деле имеете дело со значениями времени. Например, используя ваши критерии, значение 2.75 будет преобразовано в 2:75, но это ничего не значит с точки зрения времени.

Таким образом, вам действительно следует использовать TimeSpan, как вы упомянули в своем исходном сообщении, что позволит преобразовать 2.5 в 2:30 и т. д.

Другие вопросы по теме