我有关于格式化字符串或浮点数的问题。
基本上我有这些数字需要输出如下所示:
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);
}
因此,如果有任何想法ID欣赏它,我已经尝试了DateTime类,但无法正确格式化数字以供它使用。
感谢。
答案 0 :(得分:12)
你需要sprintf
用于0填充,fmod
用于提取分数,如果地板秒数是不可接受的,可选择round
:
$time = 15.33;
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60);
答案 1 :(得分:1)
您可以执行以下操作:
$example = 1.3333;
通过模1开始获取时间的小数元素
$remainder = $example % 1;
$minutes = 60 * $remainder;
然后,您可以使用(int)$example
或floor($example)
来获取您的时间部分。
$hour = floor($example);
echo $hour." ".$minutes;
答案 2 :(得分:0)
修剪浮点数的整数部分:
$time = 9.83333333333;
$hourFraction = $time - (int)$time;
乘以更大单位(小时)中的单位数(分钟):
$minutes = $hourFraction * 60;
回声:
$hours = (int)$time;
echo str_pad($hours, 2, '0', STR_PAD_LEFT) . ':' . str_pad($minutes, 2, '0', STR_PAD_LEFT);