在php中将字符串转换为float

时间:2012-04-20 18:25:34

标签: php floating-point

我正在获取有关页面执行时间的一些基准数据。它由框架提供为字符串。我想将它转换为float,将其乘以1000,并将其作为int存储在DB中。它似乎表现得非常奇怪,我希望有人可以帮我找出原因。这是代码:

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

    $elapsed = floatval($elapsed);

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

结果如下:

string 'before:' (length=7) string '0.7608' (length=14) string 'after:' (length=6) float 0

编辑: 我想出来这要归功于有人指出字符串长度是错误的。显然该方法返回字符串'{elapsed_time}',框架缓冲输出,然后用最终的eval时间替换该字符串。谢谢你的帮助。

5 个答案:

答案 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));

有点奇怪,但上述情况可能有所帮助,我不确定。