簡體   English   中英

將字符串轉換為在php中浮動

[英]Converting a string to float in php

我正在獲取有關頁面執行時間的一些基准數據。 它由框架提供為字符串。 我想將其轉換為浮點數,乘以1000,然后將其作為整數存儲在數據庫中。 似乎真的很奇怪,我希望有人能幫助我找出原因。 這是代碼:

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

    $elapsed = floatval($elapsed);

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

結果如下:

字符串'before:'(長度= 7)字符串'0.7608'(length = 14)字符串'after:'(length = 6)浮點數0

編輯:我想通了這一點,這要歸功於有人指出字符串長度是錯誤的。 顯然,該方法返回字符串'{elapsed_time}',框架正在緩沖輸出,然后將該字符串替換為最終評估時間。 謝謝您的幫助。

$elapsed = ((float)$this->benchmark->elapsed_time()) * 1000;
<?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)

?>

不確定,但是$elapsed *= 1000; 應該沒事。

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

$ this-> benchmark-> elapsed_time()可能是在浮點數之前添加了一些垃圾,這就是為什么minitech指出0.7608是14個字符。

嘗試:

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

要么

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

有點奇怪,但以上內容可能會有所幫助,我不確定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM