我正在获取有关页面执行时间的一些基准数据。它由框架提供为字符串。我想将它转换为float,将其乘以1000,并将其作为int存储在DB中。它似乎表现得非常奇怪,我希望有人可以帮我找出原因。这是代码:
$elapsed = $this->benchmark->elapsed_time();
var_dump("before:");
var_dump($elapsed);
$elapsed = floatval($elapsed);
var_dump("after:");
var_dump($elapsed);
结果如下:
编辑: 我想出来这要归功于有人指出字符串长度是错误的。显然该方法返回字符串'{elapsed_time}',框架缓冲输出,然后用最终的eval时间替换该字符串。谢谢你的帮助。
答案 0 :(得分:2)
$elapsed = ((float)$this->benchmark->elapsed_time()) * 1000;
答案 1 :(得分:1)
<?php
$time = '0.5643';
var_dump( $time );
//output :: string(6) "0.5643"
var_dump( $time * 1000 );
//output :: float(564.3)
?>
一切都如预期的那样......但是你做了一件非常愚蠢的事情:
<?php
$badtime = "\0\0\0\0\0\0\0\0" . $time;
var_dump( $badtime );
//output :: string(14) "0.5643"
var_dump($badtime * 1000);
//output :: int(0)
$goodtime = str_replace("\0", "", $badtime);
var_dump($goodtime * 1000);
//output :: float(564.3)
?>
答案 2 :(得分:1)
不确定,但$elapsed *= 1000;
应该没问题。
答案 3 :(得分:1)
<?php var_dump((float)'0.734' * 1000); //float(734) ?>
答案 4 :(得分:1)
可能是$ this-&gt; benchmark-&gt; elapsed_time()在浮动之前加载了一堆垃圾,这就是为什么0.7608是minitech指出的14个字符。
尝试:
$elapsed = floatval(trim($elapsed));
或
$elapsed = floatval(preg_replace('/[^0-9\.]/', '', $elapsed));
有点奇怪,但上述情况可能有所帮助,我不确定。