0

我得到了一些关于页面执行时间的基准数据。它由框架作为字符串提供。我想将其转换为浮点数,将其乘以 1000,并将其作为 int 存储在数据库中。它似乎表现得很奇怪,我希望有人能帮我找出原因。这是代码:

    $elapsed = $this->benchmark->elapsed_time();
    var_dump("before:");
    var_dump($elapsed);

    $elapsed = floatval($elapsed);

    var_dump("after:");
    var_dump($elapsed);

结果如下:

字符串'之前:'(长度=7)字符串'0.7608'(长度=14)字符串'之后:'(长度=6)浮点0

编辑:由于有人指出字符串长度错误,我才知道这一点。显然,该方法正在返回字符串“{elapsed_time}”,框架正在缓冲输出,然后用最终的评估时间替换该字符串。谢谢您的帮助。

4

5 回答 5

2
$elapsed = ((float)$this->benchmark->elapsed_time()) * 1000;
于 2012-04-20T18:39:38.723 回答
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)

?>
于 2012-04-20T18:28:24.293 回答
1

不确定,但$elapsed *= 1000;应该没问题。

于 2012-04-20T18:28:36.980 回答
1

<?php var_dump((float)'0.734' * 1000); //float(734) ?>

于 2012-04-20T18:29:58.097 回答
1

可能是 $this->benchmark->elapsed_time() 在浮动之前添加了一堆垃圾,这就是 minitech 指出的 0.7608 是 14 个字符的原因。

尝试:

$elapsed = floatval(trim($elapsed));

或者

$elapsed = floatval(preg_replace('/[^0-9\.]/', '', $elapsed));

有点奇怪,但以上可能会有所帮助,我不确定。

于 2012-04-20T18:44:45.250 回答