Преобразовать десятичное число, представляющее время в час, минуты, секунды - PullRequest
4 голосов
/ 18 апреля 2011

У меня есть десятичная дробь.Диапазон этого десятичного числа составляет от 0 до 23,999999.Это десятичное число представляет время.Например, если десятичное число равно 0,25, то время, которое оно представляет, составляет 12:15.Если десятичное число равно 23.50, время, которое оно представляет, равно 23:30.

У меня есть три переменные: - Часы - Минуты - Секунды

Используя это десятичное число, как мне заполнить Hours, Minutes и Seconds значения?

Ответы [ 4 ]

11 голосов
/ 18 апреля 2011

Хорошо, вот ответ на C #, но в большинстве языков это, как правило, одна и та же идея:

int hours = (int)hoursDecimal;
decimal minutesDecimal = ((hoursDecimal - hours) * 60);
int minutes = (int)minutesDecimal;
int seconds = (int)((minutesDecimal - minutes) * 60);
2 голосов
/ 18 апреля 2011

Часы должны быть довольно легкими.

В 1 часе есть 60 минут, поэтому возьмите десятичную часть, умножьте ее на 60 и возьмите целое число.Возьмите снова десятичную дробь, умножьте ее снова на 60, и у вас есть ваши секунды.

Например, давайте возьмем число 20.38490

Мы знаем, что сейчас 20 или 8 часов вечера.

Это оставляет нам число .38490

Умножая на 60, мы получаем 23,094 минуты.

Умножая .094 на 60, мы получаем 5 секунд.

1 голос
/ 23 ноября 2012

Вы можете использовать функцию пола, чтобы убрать часы и оставить минуты и секунды как доли часа. Затем вы можете снова использовать функцию пола, чтобы отделить minuites за долю часа. затем у вас остаются секунды (в долях часа)

ниже простой пример печати часов и минут восход солнца в долях после полуночи

printf( "sunrise %ld:%ld, \n", 
             (long)floor( sunrise ),
                 (long)(floor( sunrise * 60 ) - 60 * floor( sunrise )) );
0 голосов
/ 18 апреля 2011

Какой бы язык вы не использовали, вы можете сделать это, используя математические функции: MOD и FLOOR / TRUNC

Пусть "dec" будет десятичной переменной

trunc(mod(dec, 1)) => hours
trunc(mod(dec * 60, 60)) => minutes
trunc(mod(dec * 3600, 60)) => seconds

В C # вы можете усечь десятичное число до int, используя только явное приведение, например

int seconds = (int) ((dec * 3600) % 60)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...