2015-11-06 68 views
-1

我的代碼是非常簡單的,例如,我的php版本是5.5.11,這是我的示例代碼:PHP輪不工作100分之7

$result = round(($num/100), 2); // 0.070000000001 
$result = $num/100; // 0.070000000001 

我得到的$result0.070000000001 ,並且如果$num = 3$result是正確的。而我用var_dump($num),這個類型就是float。我該如何解決它?

編輯

我找到了原因,但我不知道細節。我使用Codeigniter,並且我加載了一個庫PHPExcel,這是第三方lib,當我加載它時,我會遇到這個問題,但我不確定詳細原因。

+0

它與浮動數字是如何存儲在PC內存 – Robert

+0

其做工精細,連接[看DEMO](https://eval.in/464315) –

+0

沒有什麼它錯了。確切的格式只能用字符串來實現,使用http://php.net/number_format –

回答

1

正如我在評論中寫道它與如何花車存儲在內存中

從手動連接:

永遠不要相信浮點數結果精確到了最後一位,也不要浮點數直接比較平等。如果需要更高的精度,則可以使用任意的精度數學函數和gmp函數。

http://php.net/manual/en/language.types.float.php

我不知道你想和這個浮動的變量做什麼,但如果你想比較,那麼你需要一些小量$

if(abs($a-$b) < $epsilon)

,如果你想那麼可能你應該忽略最後一位數字。 number_format()似乎是更好的解決方案。

0

這是浮動數字的問題。

你甚至可以嘗試bccomp

$a = 1.2 * 3; 
    if (bccomp($a, 3.6) === 0) { 
     echo 'equal'; 
    } else { 
     echo 'not equal'; 
    } 

    //echoes equal 

    echo "----------------------"; 
    $a = 1.2 * 3; 
    if ($a == 3.6) { 
     echo 'equal'; 
    } else { 
     echo 'not equal'; 
    } 

    //echoes not equal