2014-12-16 2 views
5

У меня вопрос о форматировании строки или поплавка.Преобразование float в HH: формат ММ

Так по существу у меня есть эти цифры, которые должны быть выведены, как показано ниже:

9.8333333333333 -> 09:50 
5.5555555555556 -> 05:33 
10.545454545455 -> 10:33 
1.3333333333333 -> 01:20 
20.923076923077 -> 20:55 

Вот функция, я написал, что делает ужасную работу на то, что мне нужно это.

function getTime($dist, $road) { 
    $roads = array('I' => 65, 'H' => 60, 'M' => 55, 'S' => 45); 
    $time = $dist/$roads[$road]; 
    return round($time -1) . ':' . substr((float)explode('.', $time)[1] * 60, 0, 2); 
} 

Так что, если у кого есть какие-либо идеи идентификатор ценят его, я попробовал класс DateTime, но был не в состоянии отформатировать число должным образом для того, чтобы использовать.

Спасибо.

+0

Посмотрите на этот ответ: HTTP: // StackOverflow .com/a/1345609/1972100 –

ответ

8

Вам просто нужно sprintf для 0 заполнения, fmod для извлечения фракции, и, возможно, round если пол секунды неприемлем:

$time = 15.33; 
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60); 
+0

Спасибо большое, что отлично поработало, и я это понимаю. – julienhaversano

+1

Это работало как шарм и серьезно спас меня! Спасибо, Корбин! Я использовал раунд. Итак, вот математика, которую я использовал: 'sprintf ('% 02d:% 02d', (int) $ time, round (fmod ($ time, 1) * 60))' – cbloss793

0

Обрежьте целую часть поплавка:

$time = 9.83333333333; 
$hourFraction = $time - (int)$time; 

Умножение на число единиц (минут) в большей единице (час):

$minutes = $hourFraction * 60; 

Echo:

$hours = (int)$time; 
echo str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT); 
+0

Это также сработало, просто не так эффективно, как метод, описанный выше. – julienhaversano

1

Вы можете сделать что-то вроде:

$example = 1.3333; 

Получить дробный элемент вашего времени, делая по модулю 1

$remainder = $example % 1; 
$minutes = 60 * $remainder; 

Вы можете использовать (int)$example или floor($example), чтобы получить час компонент вашего времени.

$hour = floor($example); 
echo $hour." ".$minutes; 
+0

По какой-то причине мода 1 не давала мне остатка, не совсем уверен, почему. Но выше это дало мне мой ответ, спасибо в любом случае! Было то же самое, что и вы. – julienhaversano

Смежные вопросы