Странная ошибка при переводе минут в часы

Я использовал приведенную ниже команду для преобразования минут (например, 366) в формат часов и минут (например, 6:06), когда столкнулся со странной ошибкой:

library(chron) #https://cran.r-project.org/web/packages/chron/chron.pdf

sub(":\\d{2}", "", times((X%/%60 +  X%%60 /3600)/24))

Я назначаю вектор вместо X в реальном коде, а пока буду использовать число. Например:

sub(":\\d{2}", "", times((240.8%/%60 +  240.8%%60 /3600)/24))

Выдает "04:01", как и должно быть. Однако та же команда с 419,8 минутами ошибочно дает «6:00»?

sub(":\\d{2}", "", times((419.8%/%60 +  419.8%%60 /3600)/24))

Когда я повторно запускаю его без цифры 419, он снова правильный. «06:59». Я повторно запустил код со случайными числами, и, похоже, с другими все в порядке. Я не могу понять проблему. Что я делаю неправильно?


person Eva    schedule 24.08.2016    source источник
comment
Пожалуйста, не публикуйте изображение вашего кода/консоли, просто вставьте сам текст.   -  person r2evans    schedule 24.08.2016
comment
Откуда взялась функция times()?   -  person Gregor Thomas    schedule 24.08.2016
comment
Это происходит от хрон   -  person Eva    schedule 24.08.2016
comment
Это проблема регулярного выражения, ничего общего с chron или times. Проверьте вывод ваших вызовов times без окружающего вызова sub.   -  person r2evans    schedule 24.08.2016


Ответы (1)


library(chron)
times((419.8%/%60 +  419.8%%60 /3600)/24)
# [1] 06:01:00
times((419%/%60 +  419%%60 /3600)/24)
# [1] 06:00:59

Проблема в вашем регулярном выражении sub. Пытаться:

sub(":\\d{2}$", "", times((419%/%60 +  419%%60 /3600)/24))
# [1] "06:00"
sub(":\\d{2}$", "", times((419.8%/%60 +  419.8%%60 /3600)/24))
# [1] "06:01"

Обновление:

Кроме того, ваша математика неверно переводит минуты в секунды. Пытаться:

times((419.8%/%60 +  419.8%%60 / 60)/24)
# [1] 06:59:48
sub(":\\d{2}$", "", times((419.8%/%60 +  419.8%%60 / 60)/24))
# [1] "06:59"
person r2evans    schedule 24.08.2016
comment
Спасибо! Но не должен ли правильный результат 419 минут быть 06:59 вместо 6:01, так как 419 минут соответствуют 6 часам 59 минутам. В этой версии, например, и 300, и 359 минут дают: 05:00. Может быть, я сделал все это неправильно. - person Eva; 24.08.2016