PHP浮点数比较方法-php教程

资源魔 35 0

PHP手册里有一句话:永远没有要比拟两个浮点数能否相等。

较量争论机外部解决浮点数的形式决议了浮点数不成能100%的准确,以是正在解决浮点数运算时会呈现精度丧失成绩。比方上面这段顺序:

<?php  
$a   =   15521.42;  
$b   =   15480.3;  
$c = $a-$b;  
var_dump($c);    //php4:float(41.120000000001)   php5:float(41.12)   
var_dump($c == 41.12);     //bool(false)   
?>

第一条输入语句:正在PHP4下输入$c多是41.120000000001,或相似的后果,前面的1就属于精度丧失的局部。正在PHP5中对这个成绩做了些“优化”,输入后果中没有会显示没有准确的局部,但同时也会让咱们漠视这个成绩,认为$c==41.12。

第二条输入语句:正在PHP4以及PHP5中城市输入false。

申明一点:这没有是PHP的成绩,而是较量争论机外部解决浮点数的成绩!正在C/JAVA中也会遇到一样的成绩。

延长一下:咱们一样不克不及应用>、<、>=或<=

那末,咱们应该怎样比拟两个浮点数相等呢?

看了下面的引见后,咱们就晓得了:没方法准确的比拟两个浮点数相等!so..咱们只能正在咱们要的精度范畴内比拟(比方下面的示例,咱们只要要比拟$c正在小数点后两位内等于41.12便可)。

上面是PHP手册评论中的示例

nction floatcmp($f1,$f2,$precision = 10) {// are 2 floats equal   
    $e = pow(10,$precision);  
    $i1 = intval($f1 * $e);  
    $i2 = intval($f2 * $e);  
    return ($i1 == $i2);  
}  
function floatgtr($big,$small,$precision = 10) {// is one float bigger than another   
    $e = pow(10,$precision);  
    $ibig = intval($big * $e);  
    $ismall = intval($small * $e);  
    return ($ibig > $ismall);  
}  
function floatgtre($big,$small,$precision = 10) {// is on float bigger or equal to another   
    $e = pow(10,$precision);  
    $ibig = intval($big * $e);  
    $ismall = intval($small * $e);  
    return ($ibig >= $ismall);  
}



相干保举:

PHP视频教程:https://www.php.cn/course/list/29/type/2.html

以上就是PHP浮点数比拟办法的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!