PHP函数' pow'奇怪的结果

时间:2015-08-10 06:17:39

标签: php if-statement pow

我正在编写一个代码,我无法理解我得到的奇怪结果。

<?php

    $a = 0.01;  
    $p = pow(0.1, 2); // result: 0.01

    if( $a < $p ){
        echo "true";
    }

?>

此条件的结果总是&#34; true&#34;虽然两个变量都具有相同的值,但来自pow的结果正在内部改变。好像我不能依赖这个功能。请有人帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

因为浮动不准确, 看看b0s3评论中提到的回答问题

  

首先阅读红色警告   http://www.php.net/manual/en/language.types.float.php。你绝不能   比较浮点数是否相等。你应该使用epsilon技术。

     

例如:

     

if (abs($a-$b) < EPSILON) { … } EPSILON代表的常量   一个非常小的数字(你必须定义它)

https://stackoverflow.com/a/3149007/4998045

所以你可以信任pow函数,但你不能信任float comparsion

答案 1 :(得分:1)

PHP Docs说:

  

基地提升到exp的力量。如果两个参数都是非负整数且结果可以表示为整数,则结果将以整数类型返回,否则将以float形式返回。

也许您需要将all转换为int或all转换为浮动。

if( (float)$a < (float)$p ){
    echo "true";
}

看到它运行:

http://phpfiddle.org/main/code/2hv5-n2fw