C ++ преобразует десятичные часы в часы, минуты и секунды - PullRequest
2 голосов
/ 15 декабря 2009

У меня есть определенное количество миль и скорость в милях в час, которые я пересчитал в количество часов, которое требуется, чтобы пройти это расстояние с этой скоростью. Теперь мне нужно преобразовать это десятичное число в часы, минуты и секунды. Как мне это сделать? Моя лучшая догадка сейчас:

double time = distance / speed;
int hours = time; // double to integer conversion chops off decimal
int minutes = (time - hours) * 60;
int seconds = (((time - hours) * 60) - minutes) * 60;

Это правильно? Есть лучший способ сделать это? Спасибо!

Ответы [ 4 ]

2 голосов
/ 15 декабря 2009

Я не знаю, как работает c ++, но этот "psuedocode" должен работать.

double time = distance / speed;
int hours = time;
double minutesRemainder = (time - hours) * 60;
int minutes = minutesRemainder;
double secondsRemainder = (minutesRemainder - minutes) * 60;
int seconds = secondsRemainder;

Исправлено, не нужно пол.

Поскольку комментарий о том, что он не работает в отрицательные времена, у вас не может быть отрицательной дистанции в физике. Я бы сказал, что это будет ошибка ввода пользователя, а не ошибка кодера!

1 голос
/ 15 декабря 2009

Я не знаю, лучше ли это ... на самом деле я не знаю наверняка, что это правильно, поскольку я не проверял это, но я сначала преобразовал бы часы в общее количество секунд, затем преобразовать это обратно в часы / минуты / секунды. Это будет выглядеть примерно так:

int totalseconds = time * 3600.0;

// divide by number of seconds in an hour, then round down by casting to an integer.
int hours = totalseconds/3600;

// divide by 60 to get minutes, then mod by 60 to get the number minutes that aren't full hours
int minutes = (totalseconds/60) % 60;  

// use mod 60 to to get number of seconds that aren't full minutes
int seconds = totalseconds % 60;  
0 голосов
/ 15 декабря 2009

а. Проверьте, не является ли скорость 0

б. плохое программирование - помещать двойник в int IMHO. использовать пол (при условии, что время положительное ...)

с. если скорость и расстояние int - результат во времени будет неправильным ...

д. @Aequitarum Custos получил его сразу после редактирования ...

0 голосов
/ 15 декабря 2009

Я бы сказал, что вы правильно поняли. : -)

Хотя я должен добавить, что если метод, подобный тому, что представил Aequitarium Custos, является более читабельным или предпочтительным для вас, во что бы то ни стало, используйте этот метод. Иногда проще рассчитать элементы данных по одному и рассчитать следующий элемент из того, который вы только что рассчитали, вместо того, чтобы использовать абсолютную формулу, всегда начинающуюся с вашего первого элемента данных.

В конце концов, пока ваша математика верна (и я думаю, что это так), вам решать, как вы хотите написать код.

...