我有一个关于格式化字符串或浮点数的问题。
所以基本上我有这些数字需要输出,如下所示:
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 填充的 sprintf
,fmod
提取分数,如果地板秒是不可接受的,可以选择round
:
$time = 15.33;
echo sprintf('%02d:%02d', (int) $time, fmod($time, 1) * 60);
你可以做这样的事情:
$example = 1.3333;
通过做模 1 来获取时间的小数元素
$remainder = $example % 1;
$minutes = 60 * $remainder;
然后,您可以使用(int)$example
或floor($example)
来获取时间的小时部分。
$hour = floor($example);
echo $hour." ".$minutes;
修剪浮点数的整数部分:
$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);